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