Redrock Postgres 搜索 英文
版本: 14 / 15 / 16 / 17 / 18

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

使用基本的输出插件回调(例如,begin_cbchange_cbcommit_cbmessage_cb),两阶段提交命令如 PREPARE TRANSACTIONCOMMIT PREPAREDROLLBACK PREPARED 不会被解码。虽然 PREPARE TRANSACTION 被忽略,但 COMMIT PREPARED 会被解码为 COMMIT,而 ROLLBACK 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 进行查找来实现。

想要解码已准备事务的用户需要注意以下几点: