49.10. ロジカルデコーディングための2相コミット #

基本的な出力プラグインコールバック(例えば、begin_cbchange_cbcommit_cbmessage_cb)では、PREPARE TRANSACTIONCOMMIT PREPAREDROLLBACK PREPAREDのような2相コミットコマンドはデコードされません。 PREPARE TRANSACTIONは無視されますが、COMMIT PREPAREDCOMMITとしてデコードされ、ROLLBACK PREPAREDROLLBACKとしてデコードされます。

2相コマンドのストリーミングをサポートするために、出力プラグインは追加のコールバックを提供する必要があります。 複数の必要な2相コミットコールバック(begin_prepare_cbprepare_cbcommit_prepared_cbrollback_prepared_cbstream_prepare_cb)とオプションのコールバック(filter_prepare_cb)があります。

2相コミットコマンドをデコードするための出力プラグインコールバックが提供されている場合、PREPARE TRANSACTIONで、そのトランザクションの変更がデコードされ、出力プラグインに渡され、prepare_cbコールバックが呼び出されます。 これは、トランザクションがコミットされたときにのみ変更が出力プラグインに渡される基本的なデコード設定とは異なります。 準備されたトランザクションの開始は、begin_prepare_cbコールバックによって示されます。

準備されたトランザクションがROLLBACK PREPAREDを使用してロールバックされると、rollback_prepared_cbコールバックが呼び出されます。 準備されたトランザクションがCOMMIT PREPAREDを使用してコミットされると、commit_prepared_cbコールバックが呼び出されます。

オプションで、出力プラグインはfilter_prepare_cbを使ってフィルタリング規則を定義し、特定のトランザクションのみを2つの相でデコードすることができます。 これはgidでパターンマッチングを行うか、xidを使って検索することで実現できます。

準備されたトランザクションをデコードしようとするユーザは、以下の点に注意する必要があります。