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;
まだまだ、トリガで置き換え出来るコードがあるので
トライしていきたいと思います。