Re: Triggers Help Again

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Paolo Lopez <murphyperu(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Triggers Help Again
Date: 2005-08-21 01:49:04
Message-ID: 20050821014904.GD21765@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Sat, Aug 20, 2005 at 04:52:43PM -0500, Paolo Lopez wrote:

> Para obligaciones de pago :
>
> llaves primarias :
> idObligacion integer
>
> otras llaves:
> nombreObligacion text
> fechaVcto date
> monto Real
> tipoBanco integer
> tipoPresencial integer
> moraxDia Real
> montoMora Real
> fechaCancelacion date
> montoCancelacion Real
> cancelado integer
> anulado integer

No entiendo por que "cancelado" y "anulado" son integers -- que es lo
que guardas ahi? Si son valores booleanos, deberias usar campos de tipo
booleano.

Otro tema que ya se ha comentado antes en la lista es que es mala idea
almacenar valores de moneda en campos de punto flotante; es mejor usar
NUMERIC(x, y) con valores apropiados de x e y (generalmente y=2).

> La regla de pago se resume en :
> 1) solo cancelar si no esta anulado.
>
> a lo que la regla 1) podria extenderla a
> 1.1) solo cancelar si no esta anulado y no esta cancelado.
> 1.2) solo anular si no esta anulado.

El protocolo de pago seria una funcion en plpgsql similar a

select into rec * from obligaciones
where idObligacion=<llave>
for update of obligaciones;

if rec.cancelado = true
raise exception 'ya esta cancelado'
elsif rec.anulado = true
raise exception 'ya esta anulado'
endif

Etc. Si lo haces de esta manera no tienes problemas de concurrencia,
puesto que el lock que se toma al hacer SELECT FOR UPDATE significa que
un solo proceso va a poder estar modificando una obligacion de pago en
un momento dado; cualquier otro va a tener que esperar hasta que ese
haya comprometido su modificacion, y cuando pueda ver el nuevo registro,
ya va a estar marcado como anulado o cancelado.

Otra cosa: por favor cuando respondas mensajes de la lista, hazlo
siempre en la lista (con copia a la lista). Gracias.

--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
"In a specialized industrial society, it would be a disaster
to have kids running around loose." (Paul Graham)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-08-21 04:41:13 [caravena@gmail.com: Invitación a participar a concurso para el 6to. Encuentro Linux Nacional]
Previous Message Alvaro Herrera 2005-08-20 22:00:12 Re: Triggers Help