PostgresSQLのTriggerで、insertする値をINSERT BEFOREで計算する
2020年03月31日
関わっていた案件で、PostgresSQLのTriggerを使って、Insertする特定のカラム値を、TriggerのInsert Beforeを使って計算して挿入するというケースがありました。
Qiitaの以下の記事がわかりやすかったです。
PostgreSQLでトリガを作成し、同一テーブル内に値を追加する
https://qiita.com/grassfield/items/60fad9c1d4a8d205bff3
CREATE OR REPLACE FUNCTION culc_totalworktime() RETURNS trigger AS $BODY$ BEGIN NEW.勤務時間 := NEW.終了時刻-NEW.開始時刻-NEW.休憩時間; -- 解説 RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION culc_totalworktime() OWNER TO postgres;
上記のようなかんじで値を返すトリガを作成して
CREATE TRIGGER totalworktime_trg BEFORE INSERT OR UPDATE ON 勤務実績 FOR EACH ROW EXECUTE PROCEDURE culc_totalworktime();
上記のようにINSERT BEFOREでトリガを呼び出してやれば、カラムに計算された値が挿入されました。