share facebook facebook twitter menu hatena pocket slack

PostgreSQLでトリガーを設定する

木村 圭佑

WRITTEN BY 木村 圭佑

こんにちは、
職人見習いの木村です。

データベースに何かしら処理が走った際に、決まった処理をする場合、トリガーを設定すると便利です。
今回は、PostgreSQLでトリガーを設定してみます。

まずはトリガー関数を作成します。

CREATE OR REPLACE FUNCTION hoge_func()
  RETURNS "trigger" AS
$BODY$
declare
begin
  insert into hoge (
    id,
    new_val,
    old_val,
    insert_datetime
  ) values (
    old.id,
    new.value,
    old.value,
    now()
  );
return new;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION hoge_func() OWNER TO postgres;

hoge_funcという関数名を定義し、関数が呼び出された際の処理をbeginとendの間に記述していきます。
new.[カラム名]と記述すると、トリガーが走った後のカラムの値を呼び出し、逆にold.[カラム名]を記述するとトリガーが走る前の値を呼び出します。

続いて、hogeテーブルにトリガーを仕込みます。
今回は、UPDATEされた後にトリガーを呼び出すように設定してみました。

CREATE TRIGGER update_hoge_tri
  AFTER UPDATE
  ON hoge
  FOR EACH ROW
  EXECUTE PROCEDURE update_hoge_func();

以上で、hogeテーブルにUPDATEがかかった後に、hoge_func関数が実行されるような設定になりました。

今回は、UPDATEが実行された後にトリガーを仕込みましたが、トリガー実行条件には以下の種類があります。

BEFOREテーブルに対してのデータ操作が行われる前にトリガーを実行する。
AFTERテーブルに対してのデータ操作が行われた後にトリガーを実行する。
INSTEAD OFテーブルに対してのデータ操作が行われた際に、データ操作は実行されず、トリガーのみを実行する。

※この記事は、なかの人(moresmileman)が書いています。

木村 圭佑

木村 圭佑

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。