[pgsql-jp: 29165] Re: 同時更新の制御2
TVH51179 @ biglobe.ne.jp
TVH51179 @ biglobe.ne.jp
2003年 2月 20日 (木) 13:40:03 JST
小林です。いつもお世話になっております。
様々な回答頂き、ありがとうございました。
解決策として以下の方法を考えました。
1.かさはらさんのおっしゃるとおり、
FECTH後にoidにてselect for update
を使用する。
2.または、SHARE MODEとROW EXCLUSIVE MODEが
競合することを利用した排他制御を行う。
トランザクションの開始で
表を共有ロック(LOCK table IN SHARE MODE)
しておけば、
UPDATE(ROW EXCLUSIVE MODEを自動獲得)時に
他プロセスによる表の共有ロックを検出してWAITする。
もちろん、同時更新時はデッドロックを検出する。
2のほうはselectは行えるけど、2つのプロセスが
別の行を更新しようとしてもWAITしてしまうので、
スループットがよろしくないので、
1のほうを使用した方がいいですね。
−−−−−−−−−−−−−−−−−−−
小林 克彦(TVH51179 @ biglobe.ne.jp)
pgsql-jp メーリングリストの案内