http://www.postgresql.org/docs/8.2/interactive/explicit-locking.htmlに記載されているように、の制限はロック行の前に適用できます。 pg_try_advisory_lock上のラッパーは動作しますが動作しません。ポストグラムpg_try_advisory_lockと制限の問題
休止コードは1つの行のみをロックしています。ロックされていない行をロックする代わりに、同じコードを他のインスタンスから実行すると、すでにロックされていた最初のIDをロックしようとしています。
参照:私の知る限り理解されるようにhttp://www.flyingtealeaf.com/2010/02/17/postgresql-concurrency
lock the rows until next select postgres とthis
select pg_try_advisory_lock(id), *
from
(
select id,val
from test
left JOIN pg_locks pgl
ON pgl.classid = tableoid('test')
AND pgl.objid = test.id
AND pgl.pid <> pg_backend_pid()
WHERE pgl.objid IS NULL
order by id limit 1
) t
あなたの質問は何ですか? –
@ Peter上記のコードが異なる5つのシステムから同時に実行されたときに、テーブルテストに例えばidを主キーとする5行が含まれていると、各システムはsys1-> id1行、sys2-> id2行のようにロックされていない行... sys5-> id5..rows。 – kiranking