如何在PostgreSQL下指定触发执行订单?
-
16-10-2019 - |
题
我正在使用触发器使用“经典”基于时间的分区。我发现需要单独的触发器,该扳机在原始表上运行。
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();
我尚未完全验证,但是我怀疑在维护触发器之前运行了分区逻辑,并且由于该行最终没有在父表中,因此第二个触发器永远不会发射。
如果我想运行一个 AFTER INSERT OR UPDATE
也是吗?由于该行没有进入原始表格,因此我不知所措地实现后逻辑。
解决方案
我不能说比 手册在这里做:
如果有的话
BEFORE
或者INSTEAD OF
触发返回NULL
, ,该行放弃了该行动,随后的触发器未射击(该行)。
(按字母顺序)以后触发同一事件或任何触发 AFTER
如果触发器将开火,如果 BEFORE
触发取消。
其他提示
PostgreSQL按名称按字母顺序执行触发器。因此,请确保使用以所需顺序获取它们的名称。从 文档
SQL指定应按照创建时间顺序发射多个触发器。 PostgreSQL使用名称顺序,被认为更方便。
顺便说一句,您的SQL两次创建相同的触发器。
不隶属于 dba.stackexchange