[pgsql-jp: 38301] Re: SYNONYM 代わりのVIEW+RULEへの、更新時ロックの挙動について
SAIMI Kohei
qs2007 @ aim.com
2007年 4月 11日 (水) 14:14:43 JST
saimiです。
> CREATE RULE upd_test
> AS ON UPDATE TO test_view
> DO INSTEAD UPDATE test_parent
> SET status = NEW.status
> WHERE id = OLD.id;
これって、項目 "id" が一致する行を更新するって意味ですよね。
> 4) DB=# UPDATE test_view SET status = 2
> DB-# WHERE id = 0 AND status = 0; -- <5)が終わるまでWAIT
> UPDATE 1 --<UPDATE 0 であることを期待
アイソレーションがread committedならば、transaction Aをコミットするまで、
statusは0に見えますよね。で、レコードがアンロックされたあとに、前述のルー
ルに従って更新しているということでは?
CREATE RULE upd_test
AS ON UPDATE TO test_view
DO INSTEAD UPDATE test_parent
SET status = NEW.status, id = NEW.id
WHERE id = OLD.id AND status = OLD.status;
としておけば、実際にUPDATEするときにはstatusの値が変更されているので、更
新されないのではという想像です。
#ここまで全く検証せずに書いてます。あしからず。
--
SAIMI Kohei <qs2007 @ aim.com>
pgsql-jp メーリングリストの案内