mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Logical decoding of TRUNCATE
Add a new WAL record type for TRUNCATE, which is only used when wal_level >= logical. (For physical replication, TRUNCATE is already replicated via SMGR records.) Add new callback for logical decoding output plugins to receive TRUNCATE actions. Author: Simon Riggs <simon@2ndquadrant.com> Author: Marco Nenciarini <marco.nenciarini@2ndquadrant.it> Author: Peter Eisentraut <peter.eisentraut@2ndquadrant.com> Reviewed-by: Petr Jelinek <petr.jelinek@2ndquadrant.com> Reviewed-by: Andres Freund <andres@anarazel.de> Reviewed-by: Alvaro Herrera <alvherre@alvh.no-ip.org>
This commit is contained in:
@@ -61,6 +61,15 @@ typedef void (*LogicalDecodeChangeCB) (struct LogicalDecodingContext *ctx,
|
||||
Relation relation,
|
||||
ReorderBufferChange *change);
|
||||
|
||||
/*
|
||||
* Callback for every TRUNCATE in a successful transaction.
|
||||
*/
|
||||
typedef void (*LogicalDecodeTruncateCB) (struct LogicalDecodingContext *ctx,
|
||||
ReorderBufferTXN *txn,
|
||||
int nrelations,
|
||||
Relation relations[],
|
||||
ReorderBufferChange *change);
|
||||
|
||||
/*
|
||||
* Called for every (explicit or implicit) COMMIT of a successful transaction.
|
||||
*/
|
||||
@@ -98,6 +107,7 @@ typedef struct OutputPluginCallbacks
|
||||
LogicalDecodeStartupCB startup_cb;
|
||||
LogicalDecodeBeginCB begin_cb;
|
||||
LogicalDecodeChangeCB change_cb;
|
||||
LogicalDecodeTruncateCB truncate_cb;
|
||||
LogicalDecodeCommitCB commit_cb;
|
||||
LogicalDecodeMessageCB message_cb;
|
||||
LogicalDecodeFilterByOriginCB filter_by_origin_cb;
|
||||
|
@@ -59,7 +59,8 @@ enum ReorderBufferChangeType
|
||||
REORDER_BUFFER_CHANGE_INTERNAL_COMMAND_ID,
|
||||
REORDER_BUFFER_CHANGE_INTERNAL_TUPLECID,
|
||||
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_INSERT,
|
||||
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM
|
||||
REORDER_BUFFER_CHANGE_INTERNAL_SPEC_CONFIRM,
|
||||
REORDER_BUFFER_CHANGE_TRUNCATE
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -99,6 +100,18 @@ typedef struct ReorderBufferChange
|
||||
ReorderBufferTupleBuf *newtuple;
|
||||
} tp;
|
||||
|
||||
/*
|
||||
* Truncate data for REORDER_BUFFER_CHANGE_TRUNCATE representing
|
||||
* one set of relations to be truncated.
|
||||
*/
|
||||
struct
|
||||
{
|
||||
Size nrelids;
|
||||
bool cascade;
|
||||
bool restart_seqs;
|
||||
Oid *relids;
|
||||
} truncate;
|
||||
|
||||
/* Message with arbitrary data. */
|
||||
struct
|
||||
{
|
||||
@@ -283,6 +296,14 @@ typedef void (*ReorderBufferApplyChangeCB) (
|
||||
Relation relation,
|
||||
ReorderBufferChange *change);
|
||||
|
||||
/* truncate callback signature */
|
||||
typedef void (*ReorderBufferApplyTruncateCB) (
|
||||
ReorderBuffer *rb,
|
||||
ReorderBufferTXN *txn,
|
||||
int nrelations,
|
||||
Relation relations[],
|
||||
ReorderBufferChange *change);
|
||||
|
||||
/* begin callback signature */
|
||||
typedef void (*ReorderBufferBeginCB) (
|
||||
ReorderBuffer *rb,
|
||||
@@ -328,6 +349,7 @@ struct ReorderBuffer
|
||||
*/
|
||||
ReorderBufferBeginCB begin;
|
||||
ReorderBufferApplyChangeCB apply_change;
|
||||
ReorderBufferApplyTruncateCB apply_truncate;
|
||||
ReorderBufferCommitCB commit;
|
||||
ReorderBufferMessageCB message;
|
||||
|
||||
|
Reference in New Issue
Block a user