mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +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:
@ -446,7 +446,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
|
||||
transform_element_list transform_type_list
|
||||
TriggerTransitions TriggerReferencing
|
||||
vacuum_relation_list opt_vacuum_relation_list
|
||||
drop_option_list pub_obj_list
|
||||
drop_option_list pub_obj_list pub_obj_type_list
|
||||
|
||||
%type <node> opt_routine_body
|
||||
%type <groupclause> group_clause
|
||||
@ -575,6 +575,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
|
||||
%type <node> var_value zone_value
|
||||
%type <rolespec> auth_ident RoleSpec opt_granted_by
|
||||
%type <publicationobjectspec> PublicationObjSpec
|
||||
%type <node> pub_obj_type
|
||||
|
||||
%type <keyword> unreserved_keyword type_func_name_keyword
|
||||
%type <keyword> col_name_keyword reserved_keyword
|
||||
@ -9701,13 +9702,10 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec
|
||||
*
|
||||
* CREATE PUBLICATION FOR ALL TABLES [WITH options]
|
||||
*
|
||||
* CREATE PUBLICATION FOR ALL SEQUENCES [WITH options]
|
||||
*
|
||||
* CREATE PUBLICATION FOR pub_obj [, ...] [WITH options]
|
||||
*
|
||||
* pub_obj is one of:
|
||||
*
|
||||
* TABLE table [, ...]
|
||||
* ALL TABLES IN SCHEMA schema [, ...]
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
CreatePublicationStmt:
|
||||
@ -9718,12 +9716,12 @@ CreatePublicationStmt:
|
||||
n->options = $4;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| CREATE PUBLICATION name FOR ALL TABLES opt_definition
|
||||
| CREATE PUBLICATION name FOR ALL pub_obj_type_list opt_definition
|
||||
{
|
||||
CreatePublicationStmt *n = makeNode(CreatePublicationStmt);
|
||||
n->pubname = $3;
|
||||
n->options = $7;
|
||||
n->for_all_tables = true;
|
||||
n->for_all_objects = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| CREATE PUBLICATION name FOR pub_obj_list opt_definition
|
||||
@ -9772,6 +9770,26 @@ PublicationObjSpec:
|
||||
$$->pubobjtype = PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA;
|
||||
$$->location = @5;
|
||||
}
|
||||
| SEQUENCE relation_expr
|
||||
{
|
||||
$$ = makeNode(PublicationObjSpec);
|
||||
$$->pubobjtype = PUBLICATIONOBJ_SEQUENCE;
|
||||
$$->pubtable = makeNode(PublicationTable);
|
||||
$$->pubtable->relation = $2;
|
||||
}
|
||||
| ALL SEQUENCES IN_P SCHEMA ColId
|
||||
{
|
||||
$$ = makeNode(PublicationObjSpec);
|
||||
$$->pubobjtype = PUBLICATIONOBJ_SEQUENCES_IN_SCHEMA;
|
||||
$$->name = $5;
|
||||
$$->location = @5;
|
||||
}
|
||||
| ALL SEQUENCES IN_P SCHEMA CURRENT_SCHEMA
|
||||
{
|
||||
$$ = makeNode(PublicationObjSpec);
|
||||
$$->pubobjtype = PUBLICATIONOBJ_SEQUENCES_IN_CUR_SCHEMA;
|
||||
$$->location = @5;
|
||||
}
|
||||
| ColId OptWhereClause
|
||||
{
|
||||
$$ = makeNode(PublicationObjSpec);
|
||||
@ -9826,6 +9844,19 @@ pub_obj_list: PublicationObjSpec
|
||||
{ $$ = lappend($1, $3); }
|
||||
;
|
||||
|
||||
pub_obj_type: TABLES
|
||||
{ $$ = (Node *) makeString("tables"); }
|
||||
| SEQUENCES
|
||||
{ $$ = (Node *) makeString("sequences"); }
|
||||
;
|
||||
|
||||
pub_obj_type_list: pub_obj_type
|
||||
{ $$ = list_make1($1); }
|
||||
| pub_obj_type_list ',' pub_obj_type
|
||||
{ $$ = lappend($1, $3); }
|
||||
;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* ALTER PUBLICATION name SET ( options )
|
||||
@ -9836,11 +9867,6 @@ pub_obj_list: PublicationObjSpec
|
||||
*
|
||||
* ALTER PUBLICATION name SET pub_obj [, ...]
|
||||
*
|
||||
* pub_obj is one of:
|
||||
*
|
||||
* TABLE table_name [, ...]
|
||||
* ALL TABLES IN SCHEMA schema_name [, ...]
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
AlterPublicationStmt:
|
||||
|
Reference in New Issue
Block a user