如何在触发器内检测准备事务

时间:2013-01-22 08:05:06

标签: postgresql transactions postgresql-9.2

我遇到现有数据库代码(触发器)的问题,该代码调用使用NOTIFY命令的函数触发器,prepared transaction的上下文不支持该命令。

我的问题很简单:从函数触发器,有没有办法检测我们是否处于准备好的事务的上下文中?

提前致谢。

1 个答案:

答案 0 :(得分:1)

无法检测到当前事务将使用准备好的事务和两阶段提交进行提交,因为您尚未PREPARE进行事务处理;事务不知道它会在你的触发器运行之前进行两阶段提交。 PostgreSQL不要求你BEGIN TRANSACTION FOR TWO PHASE COMMIT(假想的语法)或类似的东西。

您可以测试max_prepared_transactions> pg_settings中的0,以查看准备好的交易是否已启用,但是无法知道2PC是否会被使用直到它发生。