Sobre pg_advisory_locks

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

Responses

Browse pgsql-es-ayuda by date

  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