Search Postgresql Archives

Using xmin and xmax for optimistic locking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In the chapter "Using optimistic locking" of the book "PG Cookbook Second Edition" 
it is mentioned how the app can first fetch row from the table in the form
select a.*::text from table a where ...
Then do the work and then when it comes to committing do it as
   update table
          set ....
   where table.*::text = (saved from select).

If the row was changed between the time it was first read and updated, the
update will do touch any rows as the ::text will be different.

Why can't we use xmin and xmax columns to achieve the same.

select a.*,xmin,xmax into ... from table A
do your work
update table
    set ...
where pky = blahblah
and xmin = 2907587
and xmax = 0 ; 

I tested it and it works.  what I did was to select xmin and xmax and then sleep for a min.
In the meantime, I update the same row in another session.
After 1 min the update session failed to update any row because the combination of xmin 
and xmax was no longer true.

I was under the impression that xmin/xmax can not be used in the where clause for business logic as described above.  

Am I missing anything ?  If this works, it can make optimistic locking lot easier due to generic coding using xmin/xmax.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux