テーブル内の関連レコードの履歴を追跡できるようにしたいと考えています。Oracle システムでは、既知の場合は元のレコードの PK を、元の PK が指定されていない場合は新しい PK をフィールドに入力する挿入トリガーを作成することで、これを実現しました。
つまり、次のコードの場合、INS_Nomination トリガーは、新しい Nomination.parent_nomination_id フィールドに、受信した parent_nomination_id を入力するか、parent_nomination_id が NULL の場合はテーブルの PK (nomination_id) に対して生成された値を入力します。
/*create nomination tables*/
CREATE TABLE Nomination (
nomination_id NUMBER(12,0) NOT NULL ENABLE,
parent_nomination_id NUMBER(12,0) NOT NULL,
whatever VARCHAR2(400 BYTE),
created_by NUMBER(12,0) NOT NULL ENABLE,
created_date DATE DEFAULT SYSDATE NOT NULL ENABLE,
active_ind NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE,
CONSTRAINT Nomination_PK PRIMARY KEY (nomination_id) ENABLE
);
CREATE INDEX Nomination_INDEX1 ON Nomination (parent_nomination_id, active_ind DESC) ;
CREATE UNIQUE INDEX Nomination_PK ON Nomination (nomination_id);
CREATE SEQUENCE Nomination_SEQ;
CREATE OR REPLACE TRIGGER INS_Nomination BEFORE INSERT ON Nomination FOR EACH ROW
BEGIN
SELECT Nomination_SEQ.nextval
INTO :new.nomination_id
FROM Dual;
SELECT NVL(:NEW.parent_nomination_id, :NEW.nomination_id)
INTO :NEW.parent_nomination_id
FROM Dual;
END;
/
ALTER TRIGGER INS_Nomination ENABLE;
Postgres でこれと同じ機能を実現するにはどうすればよいですか?