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