El 20/04/2016 a las 22:56, Jaime Casanova escribió:
2016-04-19 13:15 GMT-05:00 Francisco Olarte <fola...@peoplecall.com>:
2016-04-19 19:55 GMT+02:00 Kernel <jucab...@gmail.com>:
Voy a hacer un proceso de facturacion y necesito asegurar que nadie pueda
facturar en el mismo momento que yo.
Necesito bloquear una tabla de manera que nadie pueda hacer un insert,
update o delete, solo pueda leer de la tabla pero nada mas hasta que termine
el trabajo.

¿CUAL SERIA EL TIPO DE BLOQUEO MAS ADECUADO?

Buff, probablemente LOCK EXCLUSIVE, que da conflicto con todo menos
con el select si no recuerdo mal, mirando ademas el nivel de
aislamiento que necesitas.


Bastaría con LOCK SHARE (evita modificaciones concurrentes).

Ahora, si lo que quieres es evitar que te incrementen el número
secuencial, debería ser suficiente
agregar un FOR UPDATE al cursor llamado albaranes.

Por cierto, esto es 4gl?


Si un usuario lanza un proceso para generar 200 facturas , no puedo permitir que otro usuario intercale un numero de factura, pero tampoco quiero que otro usuario lance otro proceso y se le quede bloqueado hasta que termine el otro usuario (ya conocemos a los usuarios..).

Estoy pensando en bloquear a nivel de tabla,crear una tabla en la que contenga proceso,empresa,serie

Cuando un proceso se inicie se debe de bloquear el registro con un select for update, pero antes debe de comprobar que no lo ha bloqueado otro usuario y asi poder mandar un aviso al usuario de que lo intente mas tarde.


¿hay alguna manera de saber si un registro esta bloqueado y evitar la espera?

Gracias


-
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