テーブル内のレコードのリビジョンを追跡する必要があります。私が行ったことは、最初のテーブルから継承し、リビジョン カウンターを追加する 2 番目のテーブルを作成することです。
CREATE TABLE A (
id SERIAL,
foo TEXT,
PRIMARY KEY (id));
CREATE TABLE B (
revision INTEGER NOT NULL) INHERITS (A);
次に、A が挿入/更新されるたびにテーブル B を更新するトリガーを作成しました。私が理解できないのは、B.revision に各 ID の個別の「シーケンス」を保持させる方法です。
例: テーブル A には i と j の 2 つの行があります。
i は 3 回更新されており、3 つのリビジョン (1、2、3) があるはずです。
j は 2 回更新されており、2 つのリビジョン (1, 2) があるはずです。
これが私がこれまでに持っているものです。おそらく私は間違った道を進んでおり、誰かが私を助けることができます!
CREATE OR REPLACE FUNCTION table_update() RETURNS TRIGGER AS $table_update$
DECLARE
last_revision INTEGER;
BEGIN
SELECT INTO last_revision MAX(revision) FROM B WHERE id = NEW.id;
IF NOT FOUND THEN
last_revision := 0;
END IF;
INSERT INTO B SELECT NEW.*;
RETURN NEW;
END;
$table_update$ LANGUAGE plpgsql;
CREATE TRIGGER table_update
AFTER INSERT OR UPDATE ON A
FOR EACH ROW EXECUTE PROCEDURE table_update();