(PostgreSQL系统)作出更改的行的表触发功能刀片ID值到日志表中,对于自定义复制

问题描述 投票:0回答:1

PostgreSQL的---最终的Sybase ADS ---我有一个将复制使用自制的触发器的表。触发器有哪些应记录信息的INSERT,UPDATE,DELETE变化,这包括I / U / d操作和改变该行的ID的功能。我使用的测试表与第一名称列,并自动递增ID测试双向复制。

如果我做一个插入到表的名称,如添加“约翰”与“1”的自动识别,我是能够插入ID值,甚至可能“约翰”到日志表?我在看的OLD.ID或NEW.ID选择,但我不知道这是怎么能工作。我的触发器/函数的代码是:

    CREATE OR REPLACE FUNCTION Insert() RETURNS TRIGGER AS $ReplInsert$
    BEGIN
        IF (TG_OP = 'DELETE') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('DELETE', OLD.ID, OLD.NAME);
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('UPDATE', NEW.ID ,NEW.NAME);
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('UPDATE', NEW.ID , NEW.NAME);
            RETURN NEW;
        END IF;
        RETURN NULL; 
    END;
$ReplInsert$ LANGUAGE plpgsql;

CREATE TRIGGER logTrg
AFTER INSERT OR UPDATE OR DELETE ON "FIRST_NAME"
    FOR EACH ROW EXECUTE PROCEDURE Insert();

这是最终使双向使用复制触发器。谢谢你的任何考虑或指导。根据需要,我会编辑。

postgresql triggers database-replication multi-master-replication
1个回答
0
投票

我能够在触发,这是我在第一次认为是行不通的,或AFTER更改为之前解决此问题:

    CREATE OR REPLACE FUNCTION Insert() RETURNS TRIGGER AS $ReplInsert$
    BEGIN
        IF (TG_OP = 'DELETE') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('DELETE', OLD.ID, OLD.NAME);
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('UPDATE', NEW.ID ,NEW.NAME);
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('UPDATE', NEW.ID , NEW.NAME);
            RETURN NEW;
        END IF;
        RETURN NULL; 
    END;
$ReplInsert$ LANGUAGE plpgsql;

CREATE TRIGGER logTrg
BEFORE INSERT OR UPDATE OR DELETE ON "FIRST_NAME"
    FOR EACH ROW EXECUTE PROCEDURE Insert();
© www.soinside.com 2019 - 2024. All rights reserved.