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