PostgreSQL - ENABLE/DISABLE 触发器回滚了吗?

PostgreSQL - are ENABLE/DISABLE trigger rolled back?

我有一个 PL/pgSQL 函数,其函数体包含一些 regular/normal DML 语句...如 UPDATE、DELETE 等

但是在这个函数的主体语句中也有这样的:

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

还有

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

现在...我知道如果函数体发生错误,所有由 UPDATE、DELETE 等语句对数据库所做的更改都将被回滚。无论是否有 EXCEPTION(即捕获异常)块作为主要功能块的一部分,这都会发生。

请注意,在进入函数时,所有触发器都处于启用状态。 所以我想 100% 确定在退出函数时它们也将处于 ENABLED 状态。

所以...我对此有些担心...我想知道是否有可能某些触发器保持禁用状态,因为未达到 --- 2 形式的语句(由于错误发生了)。

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

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

我自己通过一些简单的测试进行了尝试。

这些 ENABLE/DISABLE 个触发器语句确实参与了事务。
这意味着它在我 wanted/expected 它工作时工作。

我所做的测试表明,如果函数 禁用触发器 A,然后在到达相应的启用触发器 A 语句之前遇到错误,对触发器所做的这些更改是回滚。因此...在函数 returns 之后,触发器仍处于启用状态。

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;