[pgsql-jp: 35080] Re: ロックについて

水野 圭 kiyoshi_mizuno @ mail.toyota.co.jp
2005年 3月 22日 (火) 07:43:27 JST


水野です。

> -----Original Message-----
> 1.テーブルA,B,Cの最大IDを取得する
> 2.1の最大IDが全て同じ場合MAX+1をプログラムで作成
> 3.A.B.CテーブルにMAX+1のIDでデータをInsertする
> 4.正常にInsertできたらcommitする。

あとは素直に
3.5 Insertでエラーが起きたら1に戻ってやりなおし
でしょうか。
2の処理の重さにもよりますが、Insertの頻度が低ければ
それほどパフォーマンスには影響しないでしょう。

2の処理が重ければ
1.5 ID=Max+1で他は空のデータをInsert
3 1.5でInsertしたレコードをupdate
という方法もありますが、追記型のPostgreSQLでこの方法は
あまり推奨できないですね。
バキュームを頻繁に実施できる環境ならいいですけど。

Insert頻度が多ければ正規化を諦めてABCを1つのテーブルにするか。
ここら辺はアプリケーションの特性に応じて決めるしかないですね。




pgsql-jp メーリングリストの案内