postgres - 在事务提交之前触发

App*_* S. 9 postgresql triggers transactions

我想知道是否间接可能在事务即将提交之前执行触发器?在此触发器中,我将执行一致性检查并在需要时回滚事务.

例如,我有三个表:

users (id, name)
groups (id, name)
user_in_group (user_id, group_id)
Run Code Online (Sandbox Code Playgroud)

我想创建一个触发器,用于验证用户是否始终是组的一部分.不允许孤儿用户.每次插入用户时,此触发器将验证是否还发生了进入user_in_group的相应插入.如果不是,则事务不会提交.

这不能使用简单的基于行或语句的触发器来完成,因为上述场景需要两个单独的语句.

反过来,当从user_in_group中删除时,可以通过基于行的触发器轻松完成.

leo*_*loy 18

你看看到创建约束TRIGGER,与DEFERRABLE (INITIALLY DEFERRED)选择?

  • 如果他们有这个工作,为什么他们不允许 CHECK() 约束是可延迟的?嗯,很好的答案。 (3认同)

Mik*_*ll' 0

来自文档。。。

触发器可以定义为在任何 INSERT、UPDATE 或 DELETE 操作之前或之后执行,每个修改行一次或每个 SQL 语句一次。