我正在使用逻辑复制,并在遇到以下情况时成功触发:
CREATE TRIGGER set_updated_time_trig
AFTER INSERT OR UPDATE OR DELETE ON test
FOR EACH ROW EXECUTE FUNCTION set_updated_time();
alter table test enable always trigger set_updated_time_trig;
我用ALWAYS
->REPLICA
也是。
但是当我使用for each STATEMENT
时,它就不再工作了。我更喜欢使用for each statement
,因为我也可以添加OR TRUNCATE
。
CREATE TRIGGER set_updated_time_trig
AFTER INSERT OR UPDATE OR DELETE ON test
FOR EACH STATEMENT EXECUTE FUNCTION set_updated_time();
我怎么能在Truncate上触发?
这永远不会起作用,因为复制的是行,而不是语句。如果运行更改了十行的UPDATE
,则备用程序将修改这十行。相反,如果UPDATE
不更改任何行,则不会复制任何内容。因此,在待机状态下执行语句级触发器是没有意义的,因为它们的工作方式与行级触发器没有什么不同。