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

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 查找来实现。

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