[pgsql-jp: 38307] Re: SYNONYM 代わりのVIEW+RULEへの、更新時ロックの挙動について

SAIMI Kohei qs2007 @ aim.com
2007年 4月 11日 (水) 22:23:44 JST


再びsaimiです。

マニュアルに書かれていたことですが、

read committedの場合、UPDATE文による更新が他のトランザクションにより待機
されたとき、更新ロックを獲得後、検索条件(where句)の再評価が行われるそう
です。(ただし、再評価の対象は待機前の対象行に限定されるようですが。)

で、updateルールにより更新が行われる場合、実際にバックエンドに発行される
のはルールコマンドですから、待機による再評価は、ルールコマンド上のwhere
句によって行われており、元のUPDATE文の条件句は再評価時には参照されていな
いのでしょう。

解決になるかどうかは分かりませんが、ルールの異なる2つのビューを定義する
というはいかがでしょうか?
片方のビューには主キーのみで対象行を検索するUPDATEルールを、もうひとつの
ビューには全項目を検査するUPDATEルールを定義するって形で…。

これは蛇足ですが、マニュアルによると、PostgreSQLのビューは、内部的には
SELECTルールの定義された空表として実現しているようです。


-- 
SAIMI Kohei <qs2007 @ aim.com>




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