我读到我可以使用BEGIN-EXCEPTION
块在FUNCTION
中进行可以回滚的子事务。但为什么不能提交这个子交易呢?
如何规避用 PL / pgSQL 编写的函数的" all-or-nothing" 事务行为?是否可以使用子事务使函数make commit,同时可以回滚外部事务?
答案 0 :(得分:3)
在撰写本文时,你无法避开它(PG 9.3)。
或者更确切地说,不是直接的。您可以使用dblink模仿自动子事务,但要小心这样做是一堆蠕虫:例如,如果您的外部事务被回滚,应该发生什么?
有关PG-Hackers列表相关讨论的背景和参考,请参阅:
http://wiki.postgresql.org/wiki/Autonomous_subtransactions
http://www.postgresql.org/message-id/20111218082812.GA14355@leggeri.gi.lan