触发执行顺序

时间:2015-06-20 19:14:42

标签: postgresql

我准备了一个防笨的回滚备忘录,以便能够回滚错误的命令。它的工作原理是Ctrl-Z。为此,我准备了包含所有已完成操作的日志表。回滚菜单,对事务操作进行分组,并显示所有表。因此,UNION与表的数量相当多,而GROUP BY嵌套在另一个查询中,其中给出了一些字段的信息来识别已完成的操作。并且所有这些都存储在视图中。没有什么可以说日志的大小,几个不允许在它们之间放置LIMIT和ORDER语句的联合会使查询效率不高。我正在考虑生成回滚菜单,其中包含一个由每个触发器触发的表格。抓住AFTER动作。日志表捕获BEFORE。但是我必须确保在插入/删除所有行之后触发操作EACH STATMENT等。以便在事务和其他信息中包含大量记录。 EACH STATMENT触发器是在事务的最后触发,还是被第一行触发或随机触发?

1 个答案:

答案 0 :(得分:1)

来自文档:

Statement-level BEFORE triggers naturally fire before the statement starts to do anything, while statement-level AFTER triggers fire at the very end of the statement.

http://www.postgresql.org/docs/9.4/interactive/trigger-definition.html

换句话说,before语句触发器将在语句执行之前运行,而after语句触发器将在语句完成执行之后运行。

语句级触发器不能成为约束触发器,只有约束触发器可以推迟,因此在事务结束之前无法推迟触发器。

如果需要在给定时间运行多个触发器,则运行它们 按照他们名字的字母顺序排列。