pgAdminにてトリガ関数を実装する
はじめに
テーブルに対して、データ更新時または追加時に、自動で作成日時と更新日時を挿入させたい。そのため、トリガ関数を実装しその方法と手順をメモする。
1.対象となるテーブルを作成
まず対象となるテーブルの作成を行う
以下のSQL文を実行
CREATE TABLE client.test_trigger
(
delete_date character varying, -- 削除日時
update_date timestamp without time zone, -- 更新日時
create_date timestamp without time zone, -- 作成日時
key_code integer NOT NULL -- キー
)
WITH (
OIDS=FALSE
);
ALTER TABLE client.test_trigger
OWNER TO postgres;
COMMENT ON COLUMN client.test_trigger.delete_date IS '削除日時';
COMMENT ON COLUMN client.test_trigger.update_date IS '更新日時';
COMMENT ON COLUMN client.test_trigger.create_date IS '作成日時';
COMMENT ON COLUMN client.test_trigger.key_code IS 'キー';
2.トリガ関数作成
トリガを作成するため以下のSQL文を実行
CREATE OR REPLACE FUNCTION trigger_func()
RETURNS trigger AS
$BODY$
declare
BEGIN
IF TG_OP = 'INSERT' THEN
NEW.update_date := current_timestamp;
NEW.create_date := current_timestamp;
ELSE
IF TG_OP = 'UPDATE' THEN
NEW.update_date := current_timestamp;
END IF ;
END IF ;
RETURN NEW;
END ;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION trigger_func()
OWNER TO postgres;
3.先程作成したテーブルに対してトリガを実装
先程作成したテーブルに対してトリガを実装するため以下のSQL文を実行
CREATE TRIGGER insert_trigger_bef
BEFORE INSERT
ON test_trigger
FOR EACH ROW
EXECUTE PROCEDURE trigger_func();
CREATE TRIGGER update_trigger_bef
BEFORE UPDATE
ON test_trigger
FOR EACH ROW
EXECUTE PROCEDURE trigger_func();
BEFORE テーブルに対してのデータ操作が行われる前にトリガーを実行する。
AFTER テーブルに対してのデータ操作が行われた後にトリガーを実行する。
INSTEAD OF テーブルに対してのデータ操作が行われた際に、データ操作は実行されず、トリガーのみを実行する。
4.動作検証
動作検証を行うため、 以下のINSERT文を実行
insert into public.test_trigger (delete_date, key_code) values (0,1)
無事に更新されました。