私はpostgresqlのトリガを使用して監査テーブルを作成します。postgresqlを使用した監査テーブル
私の例:
CREATE OR REPLACE FUNCTION fn_editorial_audit()
RETURNS trigger AS $$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO eidt_aud ("code", "name","action","user_id","timestamp")
VALUES (OLD, OLD, 'D', USER, now());
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO eidt_aud ("code", "name","action","user_id","timestamp")
VALUES (NEW, NEW, 'U', USER, now());
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO eidt_aud ("code", "name","action","user_id","timestamp")
VALUES (NEW, NEW, 'I', USER, now());
RETURN NEW;
END IF;
RETURN NULL;
END;
$$ LANGUAGE 'plpgsql'; ;
CREATE TRIGGER tb_editorial_tg_audit AFTER INSERT OR UPDATE OR DELETE
ON tb_edit FOR EACH ROW EXECUTE PROCEDURE fn_edit_audit();
しかし、私は別の何かをしたい:私はそれが存在しない場合は、元の編集テーブルのデータとのデータのテーブルに行を挿入したい 、それ監査テーブル内にすでに存在する場合は監査テーブルで更新されます。それぞれの状態ではなく、常に最後の状態を保持する。
ありがとうございます!
なぜ、実際のテーブル自体にタイムスタンプを格納しないのですか? –
どうすればいいですか? –