Home Explore Blog CI



postgresql

13th chunk of `doc/src/sgml/logicaldecoding.sgml`
53ad0ec0b7eee0d3283e1f0e6a3a4c08456208548b9c63ed0000000100000fa2
 command modified
      several rows at once the callback will be called individually for each
      row. The <function>change_cb</function> callback may access system or
      user catalog tables to aid in the process of outputting the row
      modification details. In case of decoding a prepared (but yet
      uncommitted) transaction or decoding of an uncommitted transaction, this
      change callback might also error out due to simultaneous rollback of
      this very same transaction. In that case, the logical decoding of this
      aborted transaction is stopped gracefully.
<programlisting>
typedef void (*LogicalDecodeChangeCB) (struct LogicalDecodingContext *ctx,
                                       ReorderBufferTXN *txn,
                                       Relation relation,
                                       ReorderBufferChange *change);
</programlisting>
      The <parameter>ctx</parameter> and <parameter>txn</parameter> parameters
      have the same contents as for the <function>begin_cb</function>
      and <function>commit_cb</function> callbacks, but additionally the
      relation descriptor <parameter>relation</parameter> points to the
      relation the row belongs to and a struct
      <parameter>change</parameter> describing the row modification are passed
      in.
     </para>

     <note>
      <para>
       Only changes in user defined tables that are not unlogged
       (see <xref linkend="sql-createtable-unlogged"/>) and not temporary
       (see <xref linkend="sql-createtable-temporary"/>) can be extracted using
       logical decoding.
      </para>
     </note>
    </sect3>

    <sect3 id="logicaldecoding-output-plugin-truncate">
     <title>Truncate Callback</title>

     <para>
      The optional <function>truncate_cb</function> callback is called for a
      <command>TRUNCATE</command> command.
<programlisting>
typedef void (*LogicalDecodeTruncateCB) (struct LogicalDecodingContext *ctx,
                                         ReorderBufferTXN *txn,
                                         int nrelations,
                                         Relation relations[],
                                         ReorderBufferChange *change);
</programlisting>
      The parameters are analogous to the <function>change_cb</function>
      callback.  However, because <command>TRUNCATE</command> actions on
      tables connected by foreign keys need to be executed together, this
      callback receives an array of relations instead of just a single one.
      See the description of the <xref linkend="sql-truncate"/> statement for
      details.
     </para>
    </sect3>

     <sect3 id="logicaldecoding-output-plugin-filter-origin">
     <title>Origin Filter Callback</title>

     <para>
       The optional <function>filter_by_origin_cb</function> callback
       is called to determine whether data that has been replayed
       from <parameter>origin_id</parameter> is of interest to the
       output plugin.
<programlisting>
typedef bool (*LogicalDecodeFilterByOriginCB) (struct LogicalDecodingContext *ctx,
                                               RepOriginId origin_id);
</programlisting>
      The <parameter>ctx</parameter> parameter has the same contents
      as for the other callbacks. No information but the origin is
      available. To signal that changes originating on the passed in
      node are irrelevant, return true, causing them to be filtered
      away; false otherwise. The other callbacks will not be called
      for transactions and changes that have been filtered away.
     </para>
     <para>
       This is useful when implementing cascading or multidirectional
       replication solutions. Filtering by the origin allows to
       prevent replicating the same changes back and forth in such
       setups.  While transactions and changes also carry information
       about the origin, filtering via this callback is noticeably
       more efficient.
     </para>
     </sect3>

Title: Logical Decoding Output Plugin Callbacks for Row Modifications and Filtering
Summary
This section describes additional callbacks for logical decoding output plugins, including the change callback for row modifications, truncate callback for TRUNCATE commands, and filter_by_origin callback for filtering data by origin, which can be used to implement cascading or multidirectional replication solutions and prevent replicating the same changes back and forth.