postgresql-启用/禁用扳机回滚



我有一个PL/PGSQL功能,其身体包含一些常规/普通DML语句...例如更新,删除等。

,但此功能的身体语句中也有:

ALTER TABLE sc.TBL DISABLE TRIGGER TR_TBL_Delete; --- 1

以及

ALTER TABLE sc.TBL ENABLE TRIGGER TR_TBL_Delete; --- 2

现在...我知道,如果弹性的主体发生错误,则对更新,删除等对数据库进行的所有更改。语句将被回滚。无论是否有例外(即捕获异常(块作为主要弹药块的一部分,这都会发生这种情况。

请注意,在输入功能时,所有触发器都处于启用状态。因此,我想100%确保在退出功能时也将处于启用状态。

所以...我对此有些担心...我想知道是否有可能触发保持残疾状态,因为未达到--- 2表格的说明(由于发生的错误(。

在某种程度上,我想知道ENABLE TRIGGER/DISABLE TRIGGER语句是否也参与了执行Func主体的交易。

如果可能的话,我需要对官方文档的一些权威答案。

我自己尝试了一些简单的测试。

这些启用/禁用触发声明确实参与了交易。
这意味着它按照我想要/期望它可以正常工作。

我确实表明的测试表明,如果函数禁用触发器A,然后在到达相应启用触发器之前遇到错误,则对触发器进行的这些更改会回滚。因此...函数返回后,触发器仍处于启用状态。

BEGIN
    ALTER TABLE TBL DISABLE TRIGGER A;
    -- do some work (success) 
    -- more work here... but an error is raised
    ALTER TABLE TBL ENABLE TRIGGER A; -- (not executed)
    -- some other statements here (not executed) 
END;

最新更新