【发布时间】:2019-05-22 12:15:26
【问题描述】:
我有一个 PL/pgSQL 函数,它的主体包含一些常规/正常的 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(即捕获异常)块作为主 func 块的一部分,都会发生这种情况。
请注意,在进入该函数时,所有触发器都处于 ENABLED 状态。 所以我想 100% 确定在退出函数时它们也将处于 ENABLED 状态。
所以...我对此有些担心...我想知道是否有可能某些触发器保持在 DISABLED 状态,因为没有达到--- 2 形式的语句(由于发生的错误)。
在某种程度上,我想知道ENABLE TRIGGER/DISABLE TRIGGER 语句是否也参与了执行 func 主体的事务。
如果可能的话,我需要一个权威的答案,并附上一些官方文档的参考资料。
【问题讨论】:
标签: sql postgresql postgresql-11