PostgreSQL トリガで自動採番
C#のDefaultValuesNeededで自動採番している部分を
PostgreSQLのトリガに置き換えてみました。
ロジックはDBで出来ることはDBにまかせたほうが
効率的ということは思っていたのですが
今日までこのトリガと向き合うことを避けてました。
下記、手続き型関数(トリガ)は
テーブル"sector"のカラム"n_id"が同じレコードのカラム"s_id"に
レコードが存在しない場合には、'1'を
レコードが存在する場合には、その最大値 +1を
値が入力される際にINSERTします。
CREATE OR REPLACE FUNCTION assign_id()
RETURNS trigger AS
$BODY$
BEGIN
PERFORM id FROM sector WHERE n_id = NEW.n_id;
IF NOT FOUND THEN
NEW.s_id := '1';
RETURN NEW;
ELSE
SELECT COALESCE(MAX(s_id), 0) + 1 INTO NEW.s_id FROM sector WHERE n_id = NEW.n_id;
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION assign_id() OWNER TO yu2admin;まだまだ、トリガで置き換え出来るコードがあるので
トライしていきたいと思います。