mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Add decoding of sequences to built-in replication
This commit adds support for decoding of sequences to the built-in
replication (the infrastructure was added by commit 0da92dc530).
The syntax and behavior mostly mimics handling of tables, i.e. a
publication may be defined as FOR ALL SEQUENCES (replicating all
sequences in a database), FOR ALL SEQUENCES IN SCHEMA (replicating
all sequences in a particular schema) or individual sequences.
To publish sequence modifications, the publication has to include
'sequence' action. The protocol is extended with a new message,
describing sequence increments.
A new system view pg_publication_sequences lists all the sequences
added to a publication, both directly and indirectly. Various psql
commands (\d and \dRp) are improved to also display publications
including a given sequence, or sequences included in a publication.
Author: Tomas Vondra, Cary Huang
Reviewed-by: Peter Eisentraut, Amit Kapila, Hannu Krosing, Andres
Freund, Petr Jelinek
Discussion: https://postgr.es/m/d045f3c2-6cfb-06d3-5540-e63c320df8bc@enterprisedb.com
Discussion: https://postgr.es/m/1710ed7e13b.cd7177461430746.3372264562543607781@highgo.ca
This commit is contained in:
@@ -61,6 +61,7 @@ typedef enum LogicalRepMsgType
|
||||
LOGICAL_REP_MSG_RELATION = 'R',
|
||||
LOGICAL_REP_MSG_TYPE = 'Y',
|
||||
LOGICAL_REP_MSG_MESSAGE = 'M',
|
||||
LOGICAL_REP_MSG_SEQUENCE = 'Q',
|
||||
LOGICAL_REP_MSG_BEGIN_PREPARE = 'b',
|
||||
LOGICAL_REP_MSG_PREPARE = 'P',
|
||||
LOGICAL_REP_MSG_COMMIT_PREPARED = 'K',
|
||||
@@ -118,6 +119,18 @@ typedef struct LogicalRepTyp
|
||||
char *typname; /* name of the remote type */
|
||||
} LogicalRepTyp;
|
||||
|
||||
/* Sequence info */
|
||||
typedef struct LogicalRepSequence
|
||||
{
|
||||
Oid remoteid; /* unique id of the remote sequence */
|
||||
char *nspname; /* schema name of remote sequence */
|
||||
char *seqname; /* name of the remote sequence */
|
||||
bool transactional;
|
||||
int64 last_value;
|
||||
int64 log_cnt;
|
||||
bool is_called;
|
||||
} LogicalRepSequence;
|
||||
|
||||
/* Transaction info */
|
||||
typedef struct LogicalRepBeginData
|
||||
{
|
||||
@@ -230,6 +243,12 @@ extern List *logicalrep_read_truncate(StringInfo in,
|
||||
bool *cascade, bool *restart_seqs);
|
||||
extern void logicalrep_write_message(StringInfo out, TransactionId xid, XLogRecPtr lsn,
|
||||
bool transactional, const char *prefix, Size sz, const char *message);
|
||||
extern void logicalrep_write_sequence(StringInfo out, Relation rel,
|
||||
TransactionId xid, XLogRecPtr lsn,
|
||||
bool transactional,
|
||||
int64 last_value, int64 log_cnt,
|
||||
bool is_called);
|
||||
extern void logicalrep_read_sequence(StringInfo in, LogicalRepSequence *seqdata);
|
||||
extern void logicalrep_write_rel(StringInfo out, TransactionId xid,
|
||||
Relation rel);
|
||||
extern LogicalRepRelation *logicalrep_read_rel(StringInfo in);
|
||||
|
||||
Reference in New Issue
Block a user