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