mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Generic Messages for Logical Decoding
API and mechanism to allow generic messages to be inserted into WAL that are intended to be read by logical decoding plugins. This commit adds an optional new callback to the logical decoding API. Messages are either text or bytea. Messages can be transactional, or not, and are identified by a prefix to allow multiple concurrent decoding plugins. (Not to be confused with Generic WAL records, which are intended to allow crash recovery of extensible objects.) Author: Petr Jelinek and Andres Freund Reviewers: Artur Zakirov, Tomas Vondra, Simon Riggs Discussion: 5685F999.6010202@2ndquadrant.com
This commit is contained in:
@ -363,6 +363,7 @@ typedef struct OutputPluginCallbacks
|
||||
LogicalDecodeBeginCB begin_cb;
|
||||
LogicalDecodeChangeCB change_cb;
|
||||
LogicalDecodeCommitCB commit_cb;
|
||||
LogicalDecodeMessageCB message_cb;
|
||||
LogicalDecodeFilterByOriginCB filter_by_origin_cb;
|
||||
LogicalDecodeShutdownCB shutdown_cb;
|
||||
} OutputPluginCallbacks;
|
||||
@ -602,6 +603,43 @@ typedef bool (*LogicalDecodeFilterByOriginCB) (
|
||||
more efficient.
|
||||
</para>
|
||||
</sect3>
|
||||
|
||||
<sect3 id="logicaldecoding-output-plugin-message">
|
||||
<title>Generic Message Callback</title>
|
||||
|
||||
<para>
|
||||
The optional <function>message_cb</function> callback is called whenever
|
||||
a logical decoding message has been decoded.
|
||||
<programlisting>
|
||||
typedef void (*LogicalDecodeMessageCB) (
|
||||
struct LogicalDecodingContext *,
|
||||
ReorderBufferTXN *txn,
|
||||
XLogRecPtr message_lsn,
|
||||
bool transactional,
|
||||
const char *prefix,
|
||||
Size message_size,
|
||||
const char *message
|
||||
);
|
||||
</programlisting>
|
||||
The <parameter>txn</parameter> parameter contains meta information about
|
||||
the transaction, like the time stamp at which it has been committed and
|
||||
its XID. Note however that it can be NULL when the message is
|
||||
non-transactional and the XID was not assigned yet in the transaction
|
||||
which logged the message. The <parameter>lsn</parameter> has WAL
|
||||
position of the message. The <parameter>transactional</parameter> says
|
||||
if the message was sent as transactional or not.
|
||||
The <parameter>prefix</parameter> is arbitrary null-terminated prefix
|
||||
which can be used for identifying interesting messages for the current
|
||||
plugin. And finally the <parameter>message</parameter> parameter holds
|
||||
the actual message of <parameter>message_size</parameter> size.
|
||||
</para>
|
||||
<para>
|
||||
Extra care should be taken to ensure that the prefix the output plugin
|
||||
considers interesting is unique. Using name of the extension or the
|
||||
output plugin itself is often a good choice.
|
||||
</para>
|
||||
</sect3>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="logicaldecoding-output-plugin-output">
|
||||
|
Reference in New Issue
Block a user