[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 メーリングリストの案内