我正在使用触发器使用“经典”基于时间的分区。我发现需要一个单独的触发器,它在原始表上运行。
CREATE TABLE twitter_interactions(...);
CREATE OR REPLACE FUNCTION insert_twitter_interactions ...;
CREATE TRIGGER insert_twitter_interactions_trig
BEFORE INSERT OR UPDATE on twitter_interactions
FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();
CREATE OR REPLACE FUNCTION maintain_data_pointers ...;
CREATE TRIGGER maintain_data_pointers_trig
BEFORE INSERT OR UPDATE on twitter_interactions
FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();
我还没有完全验证,但我怀疑分区逻辑在维护触发器之前运行,并且由于该行没有最终出现在父表中,所以第二个触发器永远不会触发。
如果我也想运行 an 会发生什么AFTER INSERT OR UPDATE
?由于该行没有进入原始表,所以我无法实现 after 逻辑。
PostgreSQL 按名称的字母顺序执行触发器。因此,请确保使用按您想要的顺序获取它们的名称。从文档
顺便说一句,您的 SQL 两次创建相同的触发器。
我不能说它比这里的手册更好:
如果触发器取消,则(按字母顺序)稍后在同一事件上的触发器和任何
AFTER
触发器都不会触发。BEFORE