[pgsql-jp: 36913] ON UPDATEルール中でのUPDATE
Shuji TANAKA
stanaka @ longpro.ne.jp
2006年 3月 23日 (木) 00:02:02 JST
いつもありがたく参考にさせていただいております.
ルールの使い方に関して質問したいと思います.よろしくお願いします.
あるテーブルに対するON UPDATEルール中で,そのテーブル自身に対するUPDATE文を
使用したかったため,次のようにルールを定義しました.
CREATE TABLE t_test(
test_id int,
test_code int
);
CREATE RULE t_test_test_id_to_test_code_rule_u
AS ON UPDATE TO t_test
DO(
UPDATE pg_class SET relhasrules = false WHERE relname = 't_test';
UPDATE t_test SET test_code = new.test_id;
UPDATE pg_class SET relhasrules = true WHERE relname = 't_test';
);
この状態で,psqlから次のように実行したところ,
INSERT INTO t_test VALUES ( 1, null );
UPDATE t_test SET test_id = 2;
次のようなエラーが返ります.
ERROR: query rewritten 100 times, may contain cycles
何も考えずにUPDATE文をON UPDATEルール中で使用したときに,上記と同様のエラー
で実現できなかったので,これを避けるためにルール定義中にルールを一時的に無効に
するクエリを含めようとしたのですが,ルールの実行中にはそのようなクエリは意味が
ないのでしょうか?.
また,pg_classのrelhasrulesカラムをON/OFFするのではなく,pg_rewriteテーブル
のev_classカラムを一時的にnullにすることも試してみたのですが,いずれもpsqlのコ
マンドラインから実行した場合はうまく動作してくれるのですが,ルール定義中に含め
てしまった場合は上記のようにエラーが発生しました.
どのようにすれば実現できるのでしょうか?.または実現できないのでしょうか?.
どなたかご教示いただければ幸いです.なお下記のような環境で作業を行っておりま
す.
OS:CentOS3.6
PostgreSQL:7.3.10
(CentOSのrh-postgresql-7.3.10-2とrh-postgresql-server-7.3.10-2のrpm)
よろしくお願いいたします.
pgsql-jp メーリングリストの案内