PostgreSQL CREATE TRIGGER

概要:このチュートリアルでは、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_WHENTG_TABLE_NAMEなど、TG_で始まる他の局所変数も提供します。

一度トリガ関数を定義すると、INSERTUPDATEDELETEなどの1つ以上のトリガイベントにそれをバインドできます。

ポストグレーズCREATE TRIGGER文

CREATE TRIGGER文は新しいトリガを作成します。

Code language: SQL (Structured Query Language) (sql)

この構文では:

最初に、TRIGGERキーワードの後にトリガの名前を指定します。

次に、トリガを起動させるタイミングを指定します。

3番目に、トリガーを起動させるイベントを指定します。 イベントは、INSERTDELETEUPDATE または 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 BushLily 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

コメントを残す

メールアドレスが公開されることはありません。