1

Postgresql --- そして最終的には Sybase ADS --- 自家製のトリガーを使用して複製するテーブルがあります。トリガーには、I/U/D 操作と変更された行の ID を含む INSERT UPDATE DELETE 変更に関する情報を記録する機能があります。双方向レプリケーションをテストするために、名の列と自動インクリメント ID を持つテスト テーブルを使用しています。

autoID が「1」の「JOHN」を追加するなど、NAME テーブルに挿入した場合、その ID 値と「JOHN」をログ テーブルに挿入できますか? 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();

これは最終的に、トリガーを使用して双方向のレプリケーションを作成することです。ご検討またはご指導をよろしくお願いいたします。必要に応じて編集します。

4

1 に答える 1