PostgreSQL トリガー: 作成、リスト、ドロップの例
⚡ スマートサマリー
PostgreSQL トリガーとは、テーブルに対してINSERT、UPDATE、またはDELETEイベントが発生したときに自動的に実行される関数であり、追加のアプリケーションコードなしでデータベースがルールを適用し、変更をログに記録し、データを監査することを可能にします。

トリガーとは何ですか PostgreSQL?
A PostgreSQL トリガー トリガーは、データベースオブジェクト(例えばテーブル)でデータベースイベントが発生したときに自動的に起動する機能です。トリガーを起動できるデータベースイベントの例としては、INSERT、UPDATE、DELETEなどがあります。また、テーブルに対してトリガーを作成すると、そのテーブルが削除されたときにトリガーも自動的に削除されます。
トリガーの使用方法 PostgreSQL?
トリガーは、作成時に FOR EACH ROW 演算子で指定できます。このトリガーは、操作によって変更される行ごとに一度呼び出されます。また、トリガーは、作成時に FOR EACH STATEMENT 演算子で指定することもできます。このトリガーは、特定の操作に対して一度だけ実行されます。
PostgreSQL トリガーを作成します。
トリガーを作成するには、CREATE TRIGGER 関数を使用します。 関数の構文は次のとおりです。
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
トリガー名はトリガーの名前です。
BEFORE、AFTER、INSTEAD OF は、トリガーをいつ呼び出すかを決定するキーワードです。
イベント名は、トリガーを呼び出すイベントの名前です。 これは可能です INSERT、更新、削除など。
table-name は、トリガーが作成されるテーブルの名前です。
INSERT 操作用にトリガーを作成する場合は、ON 列名パラメータを追加する必要があります。
次の構文はこれを示しています。
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL トリガーの作成例
以下の価格表を使用します。
価格:
別のテーブル、Price_Audits を作成して、Price テーブルに加えられた変更を記録します。
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
これで、auditfunc という名前の新しい関数を定義できます。
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
上記の関数は、新しい行 ID とレコードの作成時刻を含むレコードをテーブル Price_Audits に挿入します。
トリガー関数ができたので、それをPriceテーブルにバインドしましょう。トリガーの名前はprice_triggerとします。新しいレコードが作成される前に、トリガー関数が自動的に呼び出され、変更がログに記録されます。トリガーは以下のとおりです。
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
新しいレコードを Price テーブルに挿入してみましょう。
INSERT INTO Price VALUES (3, 400);
Priceテーブルにレコードを挿入したので、作成したトリガーによってPrice_Auditsテーブルにもレコードが挿入されるはずです。確認してみましょう。
SELECT * FROM Price_Audits;
次のように返されます。
トリガーは正常に機能しました。
PostgreSQL リストトリガー
で作成したすべてのトリガー PostgreSQL pg_trigger テーブルに保存されます。 にあるトリガーのリストを表示するには、 データベースでは、以下に示すように SELECT コマンドを実行してテーブルをクエリします。
SELECT tgname FROM pg_trigger;
これにより、次が返されます。
pg_trigger テーブルの tgname 列は、トリガーの名前を示します。
PostgreSQL ドロップトリガー
トリガーが不要になった場合は、簡単に削除できます。 PostgreSQL トリガーを削除するには、次の構文で DROP TRIGGER ステートメントを使用します。
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
トリガー名パラメーターは、削除するトリガーの名前を示します。
table-name は、トリガーを削除するテーブルの名前を示します。
IF EXISTS 句は、存在するトリガーを削除しようとします。 IF EXISTS 句を使用せずに存在しないトリガーを削除しようとすると、エラーが発生します。
CASCADE オプションを使用すると、トリガーに依存するすべてのオブジェクトを自動的に削除できます。
RESTRICT オプションを使用すると、オブジェクトがトリガーに依存している場合、トリガーは削除されません。
例:
テーブル Company の example_trigger という名前のトリガーを削除するには、次のコマンドを実行します。
DROP TRIGGER example_trigger IF EXISTS
ON Company;
pgAdminの使用
それでは、pgAdminを使ってこれら3つの操作を実行する方法を見ていきましょう。
でトリガーを作成する方法 PostgreSQL pgAdminを使用する
トリガーを作成する方法は次のとおりです。 PostgreSQL pgAdminを使用して:
ステップ 1) pgAdmin アカウントにログインします。
pgAdminを開き、認証情報を使用してアカウントにログインしてください。
ステップ 2) デモ データベースを作成する
- 左側のナビゲーション バーで、[データベース] をクリックします。
- 「デモ」をクリックします。
ステップ 3) クエリを入力します。
Price_Audits テーブルを作成するには、エディタに次のクエリを入力します。
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
ステップ 4) クエリを実行する
「実行」ボタンをクリックします。
ステップ 5) を実行します。 Code 監査関数用
次のコードを実行して、関数auditfuncを定義します。
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql
ステップ 6) を実行します。 Code トリガーを作成する
次のコードを実行して、トリガー price_trigger を作成します。
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
ステップ 7) 新しいレコードを挿入する
- 次のコマンドを実行して、Price テーブルに新しいレコードを挿入します。
INSERT INTO Price VALUES (3, 400)
- 次のコマンドを実行して、Price_Audits テーブルにレコードが挿入されたかどうかを確認します。
SELECT * FROM Price_Audits
これにより、以下が返されるはずです。
ステップ8) テーブルの内容を確認する
Price_Auditsテーブルの内容を確認してみましょう。
pgAdmin を使用したトリガーの一覧表示
ステップ1) 次のコマンドを実行して、データベース内のトリガーを確認します。
SELECT tgname FROM pg_trigger
これにより、次が返されます。
ドロップping pgAdminを使用したトリガー
テーブル Company の example_trigger という名前のトリガーを削除するには、次のコマンドを実行します。
DROP TRIGGER example_trigger IF EXISTS
ON Company







