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 トリガーの作成例

以下の価格表を使用します。

価格:

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;

次のように返されます。

PostgreSQL トリガーを作成します。

トリガーは正常に機能しました。

Postgres リストのトリガー

で作成したすべてのトリガー PostgreSQL pg_trigger テーブルに保存されます。 にあるトリガーのリストを表示するには、 データベースでは、以下に示すように SELECT コマンドを実行してテーブルをクエリします。

SELECT tgname FROM pg_trigger;

これにより、次が返されます。

Postgres リストのトリガー

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) デモ データベースを作成する

  1. 左側のナビゲーション バーで、[データベース] をクリックします。
  2. 「デモ」をクリックします。

トリガーの作成 PostgreSQL pgAdminを使用する

ステップ 3) クエリを入力します。

Price_Audits テーブルを作成するには、エディターにクエリを入力します。

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

ステップ 4) クエリを実行する

「実行」ボタンをクリックします

トリガーの作成 PostgreSQL pgAdminを使用する

ステップ 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) 新しいレコードを挿入する

  1. 次のコマンドを実行して、Price テーブルに新しいレコードを挿入します。
    INSERT INTO Price
    VALUES (3, 400)
  2. 次のコマンドを実行して、Price_Audits テーブルにレコードが挿入されたかどうかを確認します。
    SELECT * FROM Price_Audits

    これにより、以下が返されるはずです。

トリガーの作成 PostgreSQL pgAdminを使用する

ステップ8) テーブルの内容を確認する

Price_Audits テーブルの内容を確認してみましょう。

pgAdmin を使用したトリガーの一覧表示

ステップ1) 次のコマンドを実行して、データベース内のトリガーを確認します。

SELECT tgname FROM pg_trigger

これにより、次が返されます。

pgAdmin を使用したトリガーの一覧表示

pgAdminを使用したトリガーの削除

テーブル Company の example_trigger という名前のトリガーを削除するには、次のコマンドを実行します。

DROP TRIGGER example_trigger IF EXISTS
ON Company

まとめ

  • A PostgreSQL トリガーは、テーブルなどのデータベース オブジェクトでデータベース イベントが発生したときに自動的にトリガーされる関数を指します。
  • このようなデータベース イベントの例には、INSERT、UPDATE、DELETE などが含まれます。
  • トリガーは、トリガーが作成されたデータベース オブジェクトの存続期間中のみ存在します。
  • データベース オブジェクトが削除されると、トリガーも削除されます。
  • PostgreSQL トリガーは CREATE TRIGGER ステートメントを使用して作成されます。
  • 各トリガーは、トリガーが呼び出されたときに何を行うかを示す関数に関連付けられています。

このチュートリアルで使用するデータベースをダウンロードする