From: | Oswaldo Hernández <listas(at)soft-com(dot)es> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Sobre pg_advisory_locks |
Date: | 2010-03-16 11:54:53 |
Message-ID: | 4B9F718D.8020609@soft-com.es |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola,
En ciertos casos donde hacer 'select .. for update' genera un bloqueo
demasiado fuerte estoy utilizando las funciones pg_advisory_lock, pero
se me plantean las siguientes dudas:
1.
Si para 'marcar' un registro en uso utilizo:
pg_try_advisory_lock(oid_de_tabla, id_registro)
me puedo encontrar en un futuro que el id_registro (bigint) supera la
capacidad del int4.
De momento estoy parcheando la situación, robandole un byte al oid de la
tabla (asumo que el oid de tabla nunca sobrepasará 16.777.215), y
asignándoselo al id de registro con la siguiente formula:
pg_try_advisory_lock( (oid_de_tabla::int8 << 40) + id_registro )
Pero, ¿hay alguna forma de obtener un id único, tipo bigint, que
identifique un registro de forma global?
2.
En algunos momentos utilizo pg_advisory_unlock_all() para asegurarme que
no queda ningún advisory lock pendiente de liberar.
La duda es que si, al igual que postgres genera locks automaticamente al
realizar select, etc. ¿puede postgres utilizar también advisory_locks y
entonces anularlos yo indebidamente al ejecutar pg_advisory_unlock_all?
Gracias
--
Oswaldo Hernández
From | Date | Subject | |
---|---|---|---|
Next Message | Gilberto Castillo Martínez | 2010-03-16 12:19:19 | Re: cuando se incrementa un campo serial en insert |
Previous Message | Joac | 2010-03-16 11:22:55 | cuando se incrementa un campo serial en insert |