[Pgsql-ayuda] Invocacion de una funcion

Mauro Morales mmorales@tvninteractivo.cl
14 Aug 2003 14:34:46 -0400


El mié, 13 de 08 de 2003 a las 09:53, Alvaro Herrera Munoz escribió:
> On Wed, Aug 13, 2003 at 08:59:13AM -0400, Edwin Quijada wrote:
> > Gracias!! Mira esta solucion la he usado en muchos otros lugares, claro no
> > en Postgres, pero me interesa ver tu punto de vista. Pense usar SEQUENCE
> > pero el problema es que si se genera un numero y la transaccion se aborta el
> > numero
> > no vuleve atras. Esto es para documentos en los cuales no puede haber saltos
> > en la secuencia, al menos eso fue lo que lei acerca de las secuencias. Ahora
> > bien, si existe una forma de que cuando una transaccion sea cancelada esta
> > no sea afectada , escucho.
> 
> No.  Podrias hacer un LOCK TABLE tabla-de-secuencias que sea obligatorio para
> crear un nuevo documento y usar tu funcion.  Pero sin el LOCK, puedes meterte
> en lios.
> 
> > BTW:
> > Explicame porque dices que esta forma no es correcta??
> 
> Piensa lo que pasa cuando mas de una transaccion es ejecutada concurrentemente.
> Has oido hablar de una "condicion de carrera" (race condition)?  En tu funcion,
> hay una entre el momento en que haces el SELECT y el momento en que haces el
> UPDATE.  Si nunca te ha pasado nada, es pura suerte (o has usado sistemas menos
> concurrentes que Postgres, por ej. que hacen un LOCK TABLE implicitamente)

Tambien como ayuda te podria servir la busqueda de los conceptos

"transacciones atomicas" y "serializacion de transacciones". Estoy
seguro que eso te ayudara a "ver" mejor tu problema.

Apoyo a Alvaro en terminos de manejar los bloqueos, en especial cuando
se trata de las sequences.

Saludos,

-- 
Mauro Morales <mmorales@tvninteractivo.cl>
Television Nacional de Chile