CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE func ( arguments )
CREATE TRIGGER は新しいトリガを現在のデータベース に登録します。そのトリガはリレーション table と関連づけられ 指定された関数 func を実行します。
トリガは、タプルへの操作が開始される前(制約条件のチェックと INSERT、UPDATE または DELETE が行われる前)、あるいは操作が開始された 後(制約条件がチェックされ INSERT、UPDATE または DELETE が完了した後) の前後いずれでも起動を指定することが出来ます。 イベントの前にトリガが起動 すると、そのトリガは指定したタプルにたいする操作を省略することも、 (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');