CREATE TRIGGER

Name

CREATE TRIGGER  --  新しいトリガの作成

Synopsis

CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }
    ON table FOR EACH { ROW | STATEMENT }
    EXECUTE PROCEDURE func ( arguments )
  

入力

name

既存のトリガの名前です。

table

テーブルの名前です。

event

INSERT、 DELETE または UPDATE のどれかです。

func

ユーザが供給する関数です。

出力

CREATE

トリガの作成に成功するとこのメッセージが返されます。

説明

CREATE TRIGGER は新しいトリガを現在のデータベース に登録します。そのトリガはリレーション table と関連づけられ 指定された関数 func を実行します。

トリガは、タプルへの操作が開始される前(制約条件のチェックと INSERT、UPDATE または DELETE が行われる前)、あるいは操作が開始された 後(制約条件がチェックされ INSERT、UPDATE または DELETE が完了した後) の前後いずれでも起動を指定することが出来ます。 イベントの前にトリガが起動 すると、そのトリガは指定したタプルにたいする操作を省略することも、 (INSERT と UPDATE の操作時のみ)挿入されたタプルを変更することもできます。 イベントの後にトリガが起動すると、最終の挿入、更新あるいは削除を含んだ 全ての変更がトリガに"可視"となります。

より詳しくは、 PostgreSQL プログラマーズガイドの SPI とトリガの章を参照して下さい。

注釈

CREATE TRIGGERPostgres の言語拡張です。

リレーションの所有者のみがこのリレーション上にトリガを 作ることができます。

現在のリリース (v7.0) 時点で、 STATEMENT トリガは 実装されていません。

トリガを削除する方法については、 DROP TRIGGER を参照して下さい。

使用方法

指定された 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');
   

互換性

SQL92

SQL92 には CREATE TRIGGER はありません。

上の二番目の例は FOREIGN KEY 制約条件を使用し、以下のようにして も可能です。

CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40),
    CONSTRAINT if_film_exists
    FOREIGN KEY(did) REFERENCES films
    ON UPDATE CASCADE ON DELETE CASCADE  
);