CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE ER">funcBLE> ( arguments )
CREATE TRIGGER は指定したデータベースに 新しいトリガを挿入します。トリガはリレーション relname と連係して、 指定された関数 funcname を実行します。
トリガは、タプルへの操作が開始される前(制約条件のチェックと 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');