首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PostgreSQL -是否回滚启用/禁用触发器?

PostgreSQL -是否回滚启用/禁用触发器?
EN

Stack Overflow用户
提问于 2019-05-22 20:15:27
回答 1查看 411关注 0票数 1

我有一个PL/pgSQL函数,它的主体包含一些常规的/普通的DML语句...如更新、删除等。

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

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

而且还

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

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

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 06:06:17

我自己试了几个简单的测试。

这些启用/禁用触发器语句确实参与了事务。

这意味着它正在按照我想要/期望的方式工作。

我的测试表明,如果函数禁用触发器A,然后在到达相应的启用触发器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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56256595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档