描述Postgres 10 新特性的页面提到了“触发器的转换表”。
触发器的转换表
此功能
AFTER STATEMENT
通过将旧行和新行适当地公开给查询,使触发器既有用又高效。在此功能之前,AFTER STATEMENT
触发器无法直接访问这些,并且变通方法是拜占庭式的并且性能很差。现在可以将许多触发器逻辑编写为AFTER STATEMENT
,从而避免在 FOR EACH ROW 触发器所需的每一行上进行昂贵的上下文切换。
什么是转换表?
描述Postgres 10 新特性的页面提到了“触发器的转换表”。
触发器的转换表
此功能
AFTER STATEMENT
通过将旧行和新行适当地公开给查询,使触发器既有用又高效。在此功能之前,AFTER STATEMENT
触发器无法直接访问这些,并且变通方法是拜占庭式的并且性能很差。现在可以将许多触发器逻辑编写为AFTER STATEMENT
,从而避免在 FOR EACH ROW 触发器所需的每一行上进行昂贵的上下文切换。
什么是转换表?
您知道触发器有哪些变量
OLD
和NEW
记录变量?FOR EACH ROW
转换表是
FOR EACH STATEMENT
等效的。它们是包含新旧元组的表,因此您的触发器可以看到发生了什么变化。我真的很喜欢 Craig 对该功能的解释。SQL-2011 规范在触发器的上下文中将它们定义为“被删除、插入或替换的行的集合称为转换表”。文档中提供了类似的解释,
从本质上讲,它们使您可以使用整个语句的更改,这非常方便。作为参考,创建触发器的 DDL 与转换表类似
你可以在这里看到一个例子,这里是一个来自测试套件的例子,
一些附加说明
AFTER
触发器上可用。ON CONFLICT
.需要指出的是,它并不完全确定在 PG 10 中可用。转换表有很多未解决的问题。大多数都有补丁。有些内讧是家常便饭。看来繁重的工作是由其他人承担的。该线程表明我们很快就会知道。作者回应 - 似乎又进展顺利,。