RE: Actualizar fila y controlar concurrencia

From: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, <info(at)pgsistemasmdq(dot)com(dot)ar>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Actualizar fila y controlar concurrencia
Date: 2011-08-20 14:47:52
Message-ID: BAY155-W38B81AB6790C675E793971E32D0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


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(at)postgresql(dot)org
> Subject: Re: [pgsql-es-ayuda] Actualizar fila y controlar concurrencia
> From: alvherre(at)alvh(dot)no-ip(dot)org
> To: info(at)pgsistemasmdq(dot)com(dot)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 <alvherre(at)alvh(dot)no-ip(dot)org>
> -
> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
> Para cambiar tu suscripci�n:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Edwin Quijada 2011-08-20 14:56:25 RE: separar datos de un campo
Previous Message Jose David Verbel Tous 2011-08-19 20:27:25 Re: Problemas con pgpool