PostgreSQL トリガー: 作成、リスト、ドロップの例
トリガーとは何ですか PostgreSQL?
A PostgreSQL トリガー データベース イベントがデータベース オブジェクトで発生したときに自動的にトリガーされる関数です。 たとえば、テーブルです。 トリガーをアクティブ化できるデータベース イベントの例には、INSERT、UPDATE、DELETE などが含まれます。さらに、テーブルのトリガーを作成すると、そのテーブルが削除されるとトリガーは自動的に削除されます。
トリガーの使用方法 PostgreSQL?
トリガーは、作成時に FOR EACH ROW 演算子でマークできます。このようなトリガーは、操作によって変更される行ごとに 1 回呼び出されます。トリガーは、作成時に FOR EACH STATEMENT 演算子でマークすることもできます。このトリガーは、特定の操作に対して 1 回だけ実行されます。
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_Audit テーブルにもレコードを挿入する必要があります。 これは、価格テーブルで作成したトリガーの結果として発生します。 これを確認してみましょう:
SELECT * FROM Price_Audits;
次のように返されます。
トリガーは正常に機能しました。
Postgres リストのトリガー
で作成したすべてのトリガー PostgreSQL pg_trigger テーブルに保存されます。 にあるトリガーのリストを表示するには、 データベースでは、以下に示すように SELECT コマンドを実行してテーブルをクエリします。
SELECT tgname FROM pg_trigger;
これにより、次が返されます。
pg_trigger テーブルの tgname 列は、トリガーの名前を示します。
Postgres ドロップ トリガー
をドロップするには PostgreSQL トリガーを削除するには、次の構文で DROP TRIGGER ステートメントを使用します。
DROP TRIGGER [IF EXISTS] trigger-name ON table-name [ CASCADE | RESTRICT ];
トリガー名パラメーターは、削除するトリガーの名前を示します。
table-name は、トリガーを削除するテーブルの名前を示します。
IF EXISTS 句は、存在するトリガーを削除しようとします。 IF EXISTS 句を使用せずに存在しないトリガーを削除しようとすると、エラーが発生します。
CASCADE オプションを使用すると、トリガーに依存するすべてのオブジェクトを自動的に削除できます。
RESTRICT オプションを使用すると、オブジェクトがトリガーに依存している場合、トリガーは削除されません。
例:
Price テーブル上の example_trigger という名前のトリガーを削除するには、次のコマンドを実行します。
テーブル Company の example_trigger という名前のトリガーを削除するには、次のコマンドを実行します。
DROP TRIGGER example_trigger IF EXISTS ON Company;
pgAdminの使用
次に、pgAdmin を使用して XNUMX つのアクションすべてがどのように実行されるかを見てみましょう。
でトリガーを作成する方法 PostgreSQL pgAdminを使用する
pgAdmin を使用して Postgres でトリガーを作成する方法は次のとおりです。
ステップ 1) pgAdmin アカウントにログインします。
pgAdmin を開き、資格情報を使用してアカウントにログインします。
ステップ 2) デモ データベースを作成する
- 左側のナビゲーション バーで、[データベース] をクリックします。
- 「デモ」をクリックします。
ステップ 3) クエリを入力します。
Price_Audits テーブルを作成するには、エディターにクエリを入力します。
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
ステップ 4) クエリを実行する
「実行」ボタンをクリックします
ステップ 5) Auditfunc のコードを実行する
次のコードを実行して、関数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) コードを実行してトリガーを作成する
次のコードを実行して、トリガー 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
これにより、次が返されます。
pgAdminを使用したトリガーの削除
テーブル Company の example_trigger という名前のトリガーを削除するには、次のコマンドを実行します。
DROP TRIGGER example_trigger IF EXISTS ON Company
まとめ
- A PostgreSQL トリガーは、テーブルなどのデータベース オブジェクトでデータベース イベントが発生したときに自動的にトリガーされる関数を指します。
- このようなデータベース イベントの例には、INSERT、UPDATE、DELETE などが含まれます。
- トリガーは、トリガーが作成されたデータベース オブジェクトの存続期間中のみ存在します。
- データベース オブジェクトが削除されると、トリガーも削除されます。
- PostgreSQL トリガーは CREATE TRIGGER ステートメントを使用して作成されます。
- 各トリガーは、トリガーが呼び出されたときに何を行うかを示す関数に関連付けられています。