Home Explore Blog CI



postgresql

15th chunk of `doc/src/sgml/logicaldecoding.sgml`
90684336af66b03ae48f2f46131b267a0ec823785457b6e60000000100000fa0
 considers interesting is unique. Using name of the extension or the
      output plugin itself is often a good choice.
     </para>
    </sect3>

    <sect3 id="logicaldecoding-output-plugin-filter-prepare">
     <title>Prepare Filter Callback</title>

     <para>
       The optional <function>filter_prepare_cb</function> callback
       is called to determine whether data that is part of the current
       two-phase commit transaction should be considered for decoding
       at this prepare stage or later as a regular one-phase transaction at
       <command>COMMIT PREPARED</command> time. To signal that
       decoding should be skipped, return <literal>true</literal>;
       <literal>false</literal> otherwise. When the callback is not
       defined, <literal>false</literal> is assumed (i.e. no filtering, all
       transactions using two-phase commit are decoded in two phases as well).
<programlisting>
typedef bool (*LogicalDecodeFilterPrepareCB) (struct LogicalDecodingContext *ctx,
                                              TransactionId xid,
                                              const char *gid);
</programlisting>
       The <parameter>ctx</parameter> parameter has the same contents as for
       the other callbacks. The parameters <parameter>xid</parameter>
       and <parameter>gid</parameter> provide two different ways to identify
       the transaction.  The later <command>COMMIT PREPARED</command> or
       <command>ROLLBACK PREPARED</command> carries both identifiers,
       providing an output plugin the choice of what to use.
     </para>
     <para>
       The callback may be invoked multiple times per transaction to decode
       and must provide the same static answer for a given pair of
       <parameter>xid</parameter> and <parameter>gid</parameter> every time
       it is called.
     </para>
     </sect3>

    <sect3 id="logicaldecoding-output-plugin-begin-prepare">
     <title>Transaction Begin Prepare Callback</title>

     <para>
      The required <function>begin_prepare_cb</function> callback is called
      whenever the start of a prepared transaction has been decoded. The
      <parameter>gid</parameter> field, which is part of the
      <parameter>txn</parameter> parameter, can be used in this callback to
      check if the plugin has already received this <command>PREPARE</command>
      in which case it can either error out or skip the remaining changes of
      the transaction.
<programlisting>
typedef void (*LogicalDecodeBeginPrepareCB) (struct LogicalDecodingContext *ctx,
                                             ReorderBufferTXN *txn);
</programlisting>
     </para>
    </sect3>

    <sect3 id="logicaldecoding-output-plugin-prepare">
     <title>Transaction Prepare Callback</title>

     <para>
      The required <function>prepare_cb</function> callback is called whenever
      a transaction which is prepared for two-phase commit has been
      decoded. The <function>change_cb</function> callback for all modified
      rows will have been called before this, if there have been any modified
      rows. The <parameter>gid</parameter> field, which is part of the
      <parameter>txn</parameter> parameter, can be used in this callback.
<programlisting>
typedef void (*LogicalDecodePrepareCB) (struct LogicalDecodingContext *ctx,
                                        ReorderBufferTXN *txn,
                                        XLogRecPtr prepare_lsn);
</programlisting>
     </para>
    </sect3>

    <sect3 id="logicaldecoding-output-plugin-commit-prepared">
     <title>Transaction Commit Prepared Callback</title>

     <para>
      The required <function>commit_prepared_cb</function> callback is called
      whenever a transaction <command>COMMIT PREPARED</command> has been decoded.
      The <parameter>gid</parameter> field, which is part of the
      <parameter>txn</parameter> parameter, can be used in this callback.
<programlisting>
typedef void (*LogicalDecodeCommitPreparedCB)

Title: Logical Decoding Output Plugin Callbacks for Transaction Preparation and Commit
Summary
This section describes several callbacks for logical decoding output plugins related to two-phase commit transactions, including prepare filter, transaction begin prepare, transaction prepare, and transaction commit prepared callbacks, which allow plugins to handle prepared transactions and make decisions about decoding and processing these transactions.