可以提交的函数中的子事务

时间:2014-04-17 08:21:41

标签: postgresql postgresql-9.1 plpgsql

我读到我可以使用BEGIN-EXCEPTION块在FUNCTION中进行可以回滚的子事务。但为什么不能提交这个子交易呢?

如何规避用 PL / pgSQL 编写的函数的" all-or-nothing" 事务行为?是否可以使用子事务使函数make commit,同时可以回滚外部事务?

1 个答案:

答案 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