With the basic output plugin callbacks (eg., <function>begin_cb</function>,
<function>change_cb</function>, <function>commit_cb</function> and
<function>message_cb</function>) two-phase commit commands like
<command>PREPARE TRANSACTION</command>, <command>COMMIT PREPARED</command>
and <command>ROLLBACK PREPARED</command> are not decoded. While the
<command>PREPARE TRANSACTION</command> is ignored,
<command>COMMIT PREPARED</command> is decoded as a <command>COMMIT</command>
and <command>ROLLBACK PREPARED</command> is decoded as a
<command>ROLLBACK</command>.
基本的な出力プラグインコールバック(例えば、begin_cb
、change_cb
、commit_cb
、message_cb
)では、PREPARE TRANSACTION
、COMMIT PREPARED
、ROLLBACK PREPARED
のような2相コミットコマンドはデコードされません。
PREPARE TRANSACTION
は無視されますが、COMMIT PREPARED
はCOMMIT
としてデコードされ、ROLLBACK PREPARED
はROLLBACK
としてデコードされます。
To support the streaming of two-phase commands, an output plugin needs to
provide additional callbacks. There are multiple two-phase commit callbacks
that are required, (<function>begin_prepare_cb</function>,
<function>prepare_cb</function>, <function>commit_prepared_cb</function>,
<function>rollback_prepared_cb</function> and
<function>stream_prepare_cb</function>) and an optional callback
(<function>filter_prepare_cb</function>).
2相コマンドのストリーミングをサポートするために、出力プラグインは追加のコールバックを提供する必要があります。
複数の必要な2相コミットコールバック(begin_prepare_cb
、prepare_cb
、commit_prepared_cb
、rollback_prepared_cb
、stream_prepare_cb
)とオプションのコールバック(filter_prepare_cb
)があります。
If the output plugin callbacks for decoding two-phase commit commands are
provided, then on <command>PREPARE TRANSACTION</command>, the changes of
that transaction are decoded, passed to the output plugin, and the
<function>prepare_cb</function> callback is invoked. This differs from the
basic decoding setup where changes are only passed to the output plugin
when a transaction is committed. The start of a prepared transaction is
indicated by the <function>begin_prepare_cb</function> callback.
2相コミットコマンドをデコードするための出力プラグインコールバックが提供されている場合、PREPARE TRANSACTION
で、そのトランザクションの変更がデコードされ、出力プラグインに渡され、prepare_cb
コールバックが呼び出されます。
これは、トランザクションがコミットされたときにのみ変更が出力プラグインに渡される基本的なデコード設定とは異なります。
準備されたトランザクションの開始は、begin_prepare_cb
コールバックによって示されます。
When a prepared transaction is rolled back using the
<command>ROLLBACK PREPARED</command>, then the
<function>rollback_prepared_cb</function> callback is invoked and when the
prepared transaction is committed using <command>COMMIT PREPARED</command>,
then the <function>commit_prepared_cb</function> callback is invoked.
準備されたトランザクションがROLLBACK PREPARED
を使用してロールバックされると、rollback_prepared_cb
コールバックが呼び出されます。
準備されたトランザクションがCOMMIT PREPARED
を使用してコミットされると、commit_prepared_cb
コールバックが呼び出されます。
Optionally the output plugin can define filtering rules via
<function>filter_prepare_cb</function> to decode only specific transaction
in two phases. This can be achieved by pattern matching on the
<parameter>gid</parameter> or via lookups using the
<parameter>xid</parameter>.
オプションで、出力プラグインはfilter_prepare_cb
を使ってフィルタリング規則を定義し、特定のトランザクションのみを2つの相でデコードすることができます。
これはgid
でパターンマッチングを行うか、xid
を使って検索することで実現できます。
The users that want to decode prepared transactions need to be careful about below mentioned points: 準備されたトランザクションをデコードしようとするユーザは、以下の点に注意する必要があります。
If the prepared transaction has locked [user] catalog tables exclusively then decoding prepare can block till the main transaction is committed. 準備されたトランザクションが[user]カタログテーブルを排他的にロックしている場合、メイントランザクションがコミットされるまで準備のデコードをブロックできます。
The logical replication solution that builds distributed two phase commit
using this feature can deadlock if the prepared transaction has locked
[user] catalog tables exclusively. To avoid this users must refrain from
having locks on catalog tables (e.g. explicit <command>LOCK</command> command)
in such transactions.
See <xref linkend="logicaldecoding-synchronous-caveats"/> for the details.
この機能を使用して分散2相コミットを構築するロジカルレプリケーションソリューションは、準備されたトランザクションが[user]カタログテーブルを排他的にロックした場合にデッドロックを発生する可能性があります。
これを回避するために、ユーザはこのようなトランザクションでカタログテーブルをロック(例えば明示的なLOCK
コマンド)しないようにしなければなりません。
詳細については47.8.2を参照してください。