こんにちは、
職人見習いの木村です。
データベースに何かしら処理が走った際に、決まった処理をする場合、トリガーを設定すると便利です。
今回は、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)が書いています。