Alvaro, esta semana me paso algo interesante con eso. Tengo una funcion que 
hace exactamente eso bloque el record , luego el update, bien hasta ahi, lo 
raro es que puse dicha funcion dentro de un trigger para generar dicha 
secuencia pero al hacer un insert todo se queda bloqueado y el inserrt nunca 
prospera pero si dentro del insert invoco a la funcion no hay problema solo al 
ponerla dentro del trigger.Algo extrano, nunca me habia dado cuenta porque 
siempre la uso , la funcion, desde la aplicacion.

*-------------------------------------------------------* 
*-Edwin Quijada 
*-Developer DataBase 
*-JQ Microsistemas 

*-Soporte PostgreSQL

*-www.jqmicrosistemas.com
*-809-849-8087
*-------------------------------------------------------*



> CC: pgsql-es-ayuda@postgresql.org
> Subject: Re: [pgsql-es-ayuda] Actualizar fila y controlar concurrencia
> From: alvhe...@alvh.no-ip.org
> To: i...@pgsistemasmdq.com.ar
> Date: Fri, 19 Aug 2011 11:02:16 -0400
> 
> Excerpts from iNFO's message of vie ago 19 10:32:00 -0400 2011:
> >   Hola, soy bastante nuenvo en Postgres y a los golpes he logrado armar 
> > un programa de facruracion que funcion super bien.
> > Ahora quiero solucionar el tema de concurrencia cuando hago alguna 
> > actualizaciones y no logro hacerlo.
> > 
> > el escenartio es el siguiente
> > 
> > Tengo una tabla "Comprobantes" donde guardo el ultimo numero impreso del 
> > comprobante segun corresponda al punto de venta y letra:
> > 
> > el:
> > 
> > pto_venta   letra    ult_num
> >         5              A            100
> >         5              B              50
> >         4              A              10
> >         4              B              23
> > 
> > en el progama al momento de grabar la factura acceso esta table, tomo el 
> > numeor les sumo 1 y lo vuelvo a guardar
> > 
> > se dan lo casos en que desde mas de un pc les asigan el mismo nro.
> > 
> > estuve viendo por ahi el tema de "select ... for update" para bloquear , 
> > trasacciones,etc
> 
> Eso mismo.  Abres una transacción (BEGIN) luego haces un SELECT FOR
> UPDATE del registro que quieres incrementar, luego le das el UPDATE,
> luego commit.  Este procedimiento asegura que nadie obtendrá el mismo
> número.
> 
> Observa que desde el SELECT FOR UPDATE y hasta COMMIT, otra sesión
> tratando de obtener lock sobre el mismo registro quedará bloqueado.
> (Lo cual es razonable)
> 
> -- 
> Álvaro Herrera <alvhe...@alvh.no-ip.org>
> -
> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
> Para cambiar tu suscripci�n:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
                                          

Responder a