9.3 9.4 9.5 9.6 10 11 12 13 14 15 16 17 Current(18)
PostgreSQL中文社区 问题报告 纠错本页面

47.10. 对逻辑解码的两阶段提交支持 #

使用基本输出插件回调(例如,begin_cbchange_cbcommit_cbmessage_cb)两阶段提交命令像 PREPARE TRANSACTIONCOMMIT PREPAREDROLLBACK PREPARED 不被解码。 当 PREPARE TRANSACTION 被忽略时, COMMIT PREPARED 被解码为 COMMITROLLBACK PREPARED 被解码为 ROLLBACK

为了支持两阶段命令的流,输出插件需要提供附加的回调。 有多个需要的两阶段提交回调(begin_prepare_cbprepare_cbcommit_prepared_cbrollback_prepared_cbstream_prepare_cb) 以及一个可选的回调(filter_prepare_cb)。

如果提供了解码两阶段提交命令的输出插件回调,那么在PREPARE TRANSACTION时,该事务的更改被解码,传递给输出插件,并调用prepare_cb回调。 这与只有在提交事务时才将更改传递给输出插件的基本解码设置不同。 准备好的事务的开始由begin_prepare_cb回调指示。

当使用ROLLBACK PREPARED回滚一个准备好的事务时,则调用rollback_prepared_cb回调;当准备好的事务使用COMMIT PREPARED提交时,则调用commit_prepared_cb回调。

可选地,输出插件还可以通过filter_prepare_cb定义过滤规则,以在两个阶段中只解码特定的事务。 这可以通过在gid上进行模式匹配或通过使用xid查找来实现。

想要解码准备好的事务的用户,需要注意以下提到的几点: