CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE func ( arguments )
CREATE TRIGGER は新しいトリガを現 在のデータベースに登録します。 トリガは relname リレーションと連係して、指定した funcname 関数を実行します。
トリガは、タプルへの操作が開始される (制約の検査と INSERT、UPDATE または DELETE が行われる) 前 (BEFORE)、 あるいは操作が開始された (制約が検査され INSERT、UPDATE または DELETE が完了した) 後 (AFTER)の、 前後いずれでも起動を指定することができます。 イベントの前にトリガが起動すると、そのトリガは現在の タプルに対する操作を省略することも、 (INSERT と UPDATE の操作時のみ) 挿入されたタプルを変更することもできます。 イベントの後にトリガが起動すると、最終の挿入、更新あるいは 削除を含んだ全ての変更はトリガから "可視" 状態になります。
より詳細については、 PostgreSQL プログラマガイド の SPI と トリガの章を参照して下さい。
指定された distributor のコードが distributors テーブルに存在する かどうか、films テーブルに行を追加または更新する前にチェックします。
CREATE TRIGGER if_dist_exists BEFORE INSERT OR UPDATE ON films FOR EACH ROW EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
distributor を消去するかまたはそのコードを更新する前に、 films テーブルに対する全ての参照を削除します。
CREATE TRIGGER if_film_exists BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');