[pgsql-jp: 36655] Re: トリガで値が代入されない

Kiyoshi Mizuno kiyoshi_mizuno @ mail.toyota.co.jp
2006年 1月 20日 (金) 14:02:48 JST


水野です。


> 意味の解釈の違いだと思うのですが、ご教授の程よろしく
> お願いいたします・・・

トリガファンクションで使っている”new”は
「これから処理INSERT/UPDATEしようとするレコード」
を指しています。
ですからこの場合、BEFOREトリガで
 new.f6 = current_timestamp;
によってf6カラムに値をセットして、
その結果をテーブルにINSERT/UPDATEするという流れになります。

なお、今回のような事をAFTERトリガでやって/出来てしまうと
 (1)ユーザSQLでUPDATE処理を実行する
 (2)AFTERトリガで既存レコードのf6カラムを更新
  (=トリガ関数によるUPDATE処理の発生)
 (3)AFTERトリガが無限ループする
などという事になりかねません。

AFTERトリガを使うのは主に
・テーブルへの変更記録を「別のテーブルに」記録する
・変更後の内容を利用する何らかの後続処理を起動する
する時です。




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