Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group