From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | iNFO <info(at)pgsistemasmdq(dot)com(dot)ar> |
Cc: | Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Actualizar fila y controlar concurrencia |
Date: | 2011-08-19 15:02:16 |
Message-ID: | 1313765973-sup-294@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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>
From | Date | Subject | |
---|---|---|---|
Next Message | Jose David Verbel Tous | 2011-08-19 15:35:05 | Problemas con pgpool |
Previous Message | iNFO | 2011-08-19 14:32:00 | Actualizar fila y controlar concurrencia |