Re: Sobre pg_advisory_locks

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Oswaldo Hernández <listas(at)soft-com(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Sobre pg_advisory_locks
Date: 2010-03-16 15:06:42
Message-ID: 20100316150641.GB3037@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Oswaldo Hernández escribió:

> 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?

No. Tus suposiciones son peligrosas. Podrías usar
pg_advisory_lock(int8) pero entonces no tendrías acceso a poner el OID
de la tabla. Creo que lo más sano sería no usar un id_registro int8;
¿no te alcanza con los cuatro mil millones de identificadores que provee
int4?

> 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?

No. Los candados de pg_advisory están en un espacio de locks separado
de los locks de sistema. Lo que sí puede pasar es que en un año más
agregues otros candados "advisory" que no quieras liberar. Te
recomendaría no usar unlock_all si puedes evitarlo.

--
Alvaro Herrera http://www.flickr.com/photos/alvherre/
Jason Tesser: You might not have understood me or I am not understanding you.
Paul Thomas: It feels like we're 2 people divided by a common language...

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miguel Angel Hernandez Moreno 2010-03-16 15:58:47 no encuentro pg_ctlcluster
Previous Message juan 2010-03-16 14:12:12 Re: cuando se incrementa un campo serial en insert