[pgsql-jp: 33321] ルールの作成

koyama mlac @ hintmark.com
2004年 6月 21日 (月) 10:26:00 JST


k7-koyama です。いつも、参考にさせて頂きありがとうございます。

Postgresql7.4 でルールを作成したいのですが、つまづいています。
以下の abc テーブルで、UPDATEが行われた場合、col_b のタイムスタンプ
データを、システム日付で更新したいのです。


CREATE TABLE abc (
col_a  int primary key,
col_b  timestamp not null,
col_c  varchar(30) not null
);

UPDATE文は、

update abc set col_c='hogehoge' 
  where col_a=50
のような感じで、カラムデータ全てを指定して
更新している訳ではありません


ルールは、以下のように作成したのですが、更新不可能でした

create rule abc_rule as 
on update to abc 
do 
  update abc 
  set col_b=CURRENT_TIMESTAMP 
  where col_a=old.col_a
;

マニュアルによると、updateでのルール適用は、
本来の updateの以前に行われるとされていたので、

先にルールが適用になり、col_bにシステム日付が更新
次に、本来のUPDATEが実行されるという理解です。


do instead を使う場合、本来のUPDATEに全てのカラムデータ指定
が行われていないので、問題があると考えました。


どなたか、ご存知の方がいらっしゃいましたら、ご返答
よろしくお願い致します。













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