Re: Advisory transaction lock for 128-bit space - Mailing list pgsql-general

From Bill Moran
Subject Re: Advisory transaction lock for 128-bit space
Date
Msg-id 20120307134746.278a2c01.wmoran@potentialtech.com
Whole thread Raw
In response to Advisory transaction lock for 128-bit space  (Andrey Chursin <andll@danasoft.ws>)
List pgsql-general
In response to Andrey Chursin <andll@danasoft.ws>:

> Hello.
> My application need to set advisory lock on UUID key, almost like it
> does pg_advisory_xact_lock function. The problem is argument type of
> this function - it consumes 8-byte value, not 16-byte.
>
> I can not lock on any(hi, low or middle) 8-byte part of UUID, as far
> as it can produce unexpected deadlock issues, because locking on some
> ID in this way will imply locking on more "wide" set of ID then I
> requested.
>
> Now I am doing the 'trick' using indexing insert/delete, e.g.:
> INSERT INTO table_with_uuid_pk(locking_value);
> DELETE FROM table_with_uuid_pk WHERE <inserted_row_above>;
>
> It works, but I did not found any description of such 'feature' of
> indexes. Can u, please, help to solve this synchronization issue, and
> comment the way I am dealing with it now(with index locking)
>
> P.S. The most significant fear I know have, is that currently used
> method suffers with same problem as locking for part of UUID - doest
> insert/delete really locks only on the value i passed to it?

Have you considered using row locking?  If you need the lock to
extend across multiple transactions, then row locking won't work.

The problem with what you're doing is that if a process crashes, or
is otherwise uncleanly disconnected, the lock table is polluted.
My recommendation would be to add another column to the table with
the UUID key that keeps a unique 8 byte number that you can use
the advisory lock on.  You can use a sequence to automatically
generate unique values for it, and as long as you don't exceed
2 billion rows, you'll be fine.  Of course, if you expect that
you might exceed 2 billion rows, that won't work either.

--
Bill Moran
http://www.potentialtech.com
http://people.collaborativefusion.com/~wmoran/

pgsql-general by date:

Previous
From: Carlos Mennens
Date:
Subject: Automated Backup Script Help (Linux)
Next
From:
Date:
Subject: Converting stored procedures from SQL Anywhere to PostGres.