复制表的触发器数据已更改-postgres

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

我有2个数据库,第一个是主数据库,第二个是副本数据库(只是一些主数据库表)。当尝试从主数据库表中复制触发器时,我尝试将触发器添加到副本表上以进行捕获。

我使用触发器来捕获插入,删除和更新操作,但似乎不起作用。该触发器仅适用于从sql语句更改的某些表。不适用于副本表。

是否有任何方法可以捕获副本表的更改?我使用go lang并遵循这篇文章的指南https://coussej.github.io/2015/09/15/Listening-to-generic-JSON-notifications-from-PostgreSQL-in-Go/

我做了这些步骤:

-- create function
CREATE OR REPLACE FUNCTION notify_event() RETURNS TRIGGER AS $$
DECLARE
data json;
notification json;
BEGIN
IF (TG_OP = 'DELETE') THEN
data = row_to_json(OLD);
ELSE
data = row_to_json(NEW);
END IF;
notification = json_build_object(
'table',TG_TABLE_NAME,
'action', TG_OP,
'data', data);
PERFORM pg_notify('events',notification::text);
RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- create trigger
CREATE TRIGGER user_warehouse_notify_event
AFTER INSERT OR UPDATE OR DELETE ON users_warehouse_rel
FOR EACH ROW EXECUTE PROCEDURE notify_event();

-- enable replica trigger 
ALTER TABLE users_warehouse_rel ENABLE REPLICA TRIGGER user_warehouse_notify_event

仍然无法使用

postgresql triggers replication
1个回答
1
投票

当逻辑复制应用其更改时,session_replication_role设置为replica,因此不会触发常规触发器。

要更改其触发器,请使用

ALTER TABLE atable ENABLE ALWAYS TRIGGER trigger_name;

使用此按钮之前请三思–错误定义的触发器会破坏复制。

© www.soinside.com 2019 - 2024. All rights reserved.