概要:このチュートリアルでは、PostgreSQLのCREATE TRIGGER
ステートメントを使ってトリガーを作成する方法を学習します。
PostgreSQLで新しいトリガーを作成するには、次のステップに進みます:
- First, create trigger function using
CREATE FUNCTION
statement. - 次に、
CREATE TRIGGER
文を使用してトリガ関数をテーブルにバインドします。
ユーザ定義関数の作成に慣れていない場合は、PL/pgSQLセクションを参照してください。
トリガ関数の作成構文
トリガ関数は通常のユーザ定義関数と似ています。 しかし、トリガ関数は引数を取らず、trigger
型の戻り値を持ちます。
以下はトリガ関数を作成する構文を示しています:
Code language: SQL (Structured Query Language) (sql)
PostgreSQLがサポートする任意の言語を使用して、トリガ関数を作成できることに注意してください。 このチュートリアルでは、PL/pgSQLを使用します。
トリガ関数は、ローカル変数のセットを含むTriggerDataと呼ばれる特別な構造体を通して、呼び出し環境に関するデータを受信します。
PostgreSQLは、TG_WHEN
やTG_TABLE_NAME
など、TG_
で始まる他の局所変数も提供します。
一度トリガ関数を定義すると、INSERT
、UPDATE
、DELETE
などの1つ以上のトリガイベントにそれをバインドできます。
ポストグレーズCREATE TRIGGER文
CREATE TRIGGER
文は新しいトリガを作成します。
Code language: SQL (Structured Query Language) (sql)
この構文では:
最初に、TRIGGER
キーワードの後にトリガの名前を指定します。
次に、トリガを起動させるタイミングを指定します。
3番目に、トリガーを起動させるイベントを指定します。 イベントは、INSERT
、DELETE
、UPDATE
または TRUNCATE
です。
4番目に、ON
キーワードの後にトリガと関連付けられたテーブルの名前を指定します。
Fifth, トリガの種類を指定します。
-
FOR EACH ROW
節で指定される行レベルトリガ。 -
FOR EACH STATEMENT
節で指定されるステートメントレベルトリガ。
行レベルトリガは各行に対して、ステートメントレベルトリガは各トランザクションに対して起動されます。
テーブルに100行があり、DELETE
イベントが発生すると起動するトリガが2つあるとします。
DELETE
文が100行削除すると行レベルトリガが100回、削除行に対して1回起動されます。 一方、ステートメントレベルのトリガは、削除された行の数に関係なく1回だけ起動されます。
最後に、EXECUTE PROCEDURE
キーワードの後にトリガ関数の名前を指定します。
PostgreSQL CREATE TRIGGERの例
次のステートメントは、employees
:
Code language: SQL (Structured Query Language) (sql)
従業員の名前が変わったとき、employee_audits
という別のテーブルに変更を記録したいと仮定します。
Code language: SQL (Structured Query Language) (sql)
まず、log_last_name_changes
:
Code language: SQL (Structured Query Language) (sql)
この関数は、従業員の姓が変更された場合、従業員 ID、姓、変更時刻を含む employee_audits
テーブルに古い姓を挿入します。
OLD
は更新前の行を表し、NEW
は更新される新しい行を表します。 OLD.last_name
は更新前の姓を、NEW.last_name
は新しい姓を返します。
次に、トリガー関数をemployees
テーブルにバインドします。 トリガ名はlast_name_changes
です。
Code language: SQL (Structured Query Language) (sql)
3番目、employees
テーブルにいくつかの行を挿入します:
Code language: SQL (Structured Query Language) (sql)
4番目、employees
テーブルの内容を調べます:
Code language: SQL (Structured Query Language) (sql)
Lily Bush
がLily Brown
に名字を変更したと仮定します。
5番目、Lilyの姓を新しいものに更新します:
Code language: SQL (Structured Query Language) (sql)
7番目、Lily
の姓が更新されたかどうかをチェックします:
Code language: SQL (Structured Query Language) (sql)
出力からわかるように、Lilyの姓が更新されました。
8番目は、employee_audits
テーブルの内容を確認します:
Code language: SQL (Structured Query Language) (sql)
トリガーにより、employee_audits
テーブルに変更が記録されました。
このチュートリアルでは、PostgreSQLのCREATE TRIGGER
を使用して新しいトリガーを作成する方法を学びました。
- このチュートリアルは参考になりましたか?
- YesNo