Hola,

Estoy empezando con esto de las transacciones, y ya me dado de bruces con esto del deadlock.

He empezado a leer y mas o menos he entendido el problema , pero por favor corregime si no lo he entendido bien.

Por lo que veo hay varios casos en los que podemos obtener un deadlock de estos :

1.- que una transacción t1 necesite que termine la t2 y esta t2 a su vez necesita que termine t1 para poder terminar, entonces el gestor detecta esto y elimina la mas antigua (por ejemplo la t1) y devuelve el deadlock en la t1, y la t2 termina correctamente.

2.- Empieza la transaccion t1(1) (varios insert en la tabla x), y despues otro usuario lanza la misma transaccion t1(2), si la t1(1) tarda mucho tiempo en terminar, el gestor devuelve el deadlock a la t1(1) y asi la t1(2) se puede comenzar y terminar correctamente

¿correcto?, ¿voy bien hasta qui?.


Tengo un proceso de cierre de inventario que puede tardar 10 minutos en terminar y no quiero que nadie pueda tocar la tabla , ni insertar, ni modificar.

Había pensado que si pongo  'LOCK TABLE movimientos IN   EXCLUSIVE MODE'
y no recibía ningún error, la tabla ya era de uso exclusivo de mi proceso, que nadie podía molestar a mi proceso y que al resto de procesos debían de esperar para iniciarse o les daría un error al iniciar, pero mi sorpresa es que mi proceso recibe un deadlock y el resto termina bien.

Si el cierre se ejecuta solo, termina perfectamente, pero en el momento que algun usuario no se esta quieto , intenta introducir un movimiento ya recibo el deadlock . Como es muy difícil que un usuario te haga caso cuando le dices que no trabaje, había pensado que al bloquear la tabla les daría error a ellos y no podrían hacer nada hasta que el cierre terminara.

¿ que estoy haciendo mal ?  , ¿como lo puedo hacer?






-
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