我正在使用触发器使用“经典”基于时间的分区。我发现需要单独的触发器,该扳机在原始表上运行。

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两次创建相同的触发器。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top