From 8d6a5f0ba31e2821ef0174a0875b4afdd67a3c55 Mon Sep 17 00:00:00 2001 From: Vignesh C Date: Thu, 26 Mar 2026 20:30:14 +0530 Subject: [PATCH] Change syntax of EXCEPT TABLE clause in publication commands Adjust the syntax of the EXCEPT clause in CREATE/ALTER PUBLICATION to move the TABLE keyword inside the relation list. Old syntax: CREATE PUBLICATION ... FOR ALL TABLES EXCEPT TABLE (t1, ...); ALTER PUBLICATION ... SET ALL TABLES EXCEPT TABLE (t1, ...); New syntax: CREATE PUBLICATION ... FOR ALL TABLES EXCEPT (TABLE t1, ...); ALTER PUBLICATION ... SET ALL TABLES EXCEPT (TABLE t1, ...); This change is purely syntactic and does not alter behavior. --- doc/src/sgml/ref/alter_publication.sgml | 4 ++-- doc/src/sgml/ref/create_publication.sgml | 6 +++--- src/backend/parser/gram.y | 6 +++--- src/bin/pg_dump/pg_dump.c | 2 +- src/bin/pg_dump/t/002_pg_dump.pl | 12 ++++++------ src/bin/psql/tab-complete.in.c | 24 +++++++++++------------ src/test/regress/expected/publication.out | 22 ++++++++++----------- src/test/regress/sql/publication.sql | 22 ++++++++++----------- src/test/subscription/t/037_except.pl | 8 ++++---- 9 files changed, 53 insertions(+), 53 deletions(-) diff --git a/doc/src/sgml/ref/alter_publication.sgml b/doc/src/sgml/ref/alter_publication.sgml index 7f0e46380cc..1416e98d793 100644 --- a/doc/src/sgml/ref/alter_publication.sgml +++ b/doc/src/sgml/ref/alter_publication.sgml @@ -35,7 +35,7 @@ ALTER PUBLICATION name RENAME TO and publication_all_object is one of: - ALL TABLES [ EXCEPT TABLE ( except_table_object [, ... ] ) ] + ALL TABLES [ EXCEPT ( TABLE except_table_object [, ... ] ) ] ALL SEQUENCES and publication_drop_object is one of: @@ -265,7 +265,7 @@ ALTER PUBLICATION mypublication SET TABLE users (user_id, firstname, lastname), Replace the publication's EXCEPT TABLE list: -ALTER PUBLICATION mypublication SET ALL TABLES EXCEPT TABLE (users, departments); +ALTER PUBLICATION mypublication SET ALL TABLES EXCEPT (TABLE users, departments); diff --git a/doc/src/sgml/ref/create_publication.sgml b/doc/src/sgml/ref/create_publication.sgml index 77066ef680b..186fb582085 100644 --- a/doc/src/sgml/ref/create_publication.sgml +++ b/doc/src/sgml/ref/create_publication.sgml @@ -32,7 +32,7 @@ CREATE PUBLICATION name and publication_all_object is one of: - ALL TABLES [ EXCEPT TABLE ( except_table_object [, ... ] ) ] + ALL TABLES [ EXCEPT ( TABLE except_table_object [, ... ] ) ] ALL SEQUENCES and table_and_columns is: @@ -532,7 +532,7 @@ CREATE PUBLICATION all_tables_sequences FOR ALL TABLES, ALL SEQUENCES; Create a publication that publishes all changes in all tables except users and departments: -CREATE PUBLICATION all_tables_except FOR ALL TABLES EXCEPT TABLE (users, departments); +CREATE PUBLICATION all_tables_except FOR ALL TABLES EXCEPT (TABLE users, departments); @@ -541,7 +541,7 @@ CREATE PUBLICATION all_tables_except FOR ALL TABLES EXCEPT TABLE (users, departm all changes in all tables except users and departments: -CREATE PUBLICATION all_sequences_tables_except FOR ALL SEQUENCES, ALL TABLES EXCEPT TABLE (users, departments); +CREATE PUBLICATION all_sequences_tables_except FOR ALL SEQUENCES, ALL TABLES EXCEPT (TABLE users, departments); diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 0fea726cdd5..0562dde68a3 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11256,7 +11256,7 @@ AlterOwnerStmt: ALTER AGGREGATE aggregate_with_argtypes OWNER TO RoleSpec * * pub_all_obj_type is one of: * - * TABLES [EXCEPT TABLE ( table [, ...] )] + * TABLES [EXCEPT (TABLE table [, ...] )] * SEQUENCES * * CREATE PUBLICATION FOR pub_obj [, ...] [WITH options] @@ -11399,7 +11399,7 @@ pub_obj_list: PublicationObjSpec ; opt_pub_except_clause: - EXCEPT TABLE '(' pub_except_obj_list ')' { $$ = $4; } + EXCEPT '(' TABLE pub_except_obj_list ')' { $$ = $4; } | /*EMPTY*/ { $$ = NIL; } ; @@ -11462,7 +11462,7 @@ pub_except_obj_list: PublicationExceptObjSpec * * pub_all_obj_type is one of: * - * ALL TABLES [ EXCEPT TABLE ( table_name [, ...] ) ] + * ALL TABLES [ EXCEPT ( TABLE table_name [, ...] ) ] * ALL SEQUENCES * *****************************************************************************/ diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 5d1f7682f11..76558fe50b2 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -4714,7 +4714,7 @@ dumpPublication(Archive *fout, const PublicationInfo *pubinfo) TableInfo *tbinfo = (TableInfo *) cell->ptr; if (++n_except == 1) - appendPQExpBufferStr(query, " EXCEPT TABLE ("); + appendPQExpBufferStr(query, " EXCEPT (TABLE "); else appendPQExpBufferStr(query, ", "); appendPQExpBuffer(query, "ONLY %s", fmtQualifiedDumpable(tbinfo)); diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl index 051a3d8ea3d..b4b8efed513 100644 --- a/src/bin/pg_dump/t/002_pg_dump.pl +++ b/src/bin/pg_dump/t/002_pg_dump.pl @@ -3215,9 +3215,9 @@ my %tests = ( 'CREATE PUBLICATION pub8' => { create_order => 50, create_sql => - 'CREATE PUBLICATION pub8 FOR ALL TABLES EXCEPT TABLE (dump_test.test_table);', + 'CREATE PUBLICATION pub8 FOR ALL TABLES EXCEPT (TABLE dump_test.test_table);', regexp => qr/^ - \QCREATE PUBLICATION pub8 FOR ALL TABLES EXCEPT TABLE (ONLY dump_test.test_table) WITH (publish = 'insert, update, delete, truncate');\E + \QCREATE PUBLICATION pub8 FOR ALL TABLES EXCEPT (TABLE ONLY dump_test.test_table) WITH (publish = 'insert, update, delete, truncate');\E /xm, like => { %full_runs, section_post_data => 1, }, }, @@ -3225,9 +3225,9 @@ my %tests = ( 'CREATE PUBLICATION pub9' => { create_order => 50, create_sql => - 'CREATE PUBLICATION pub9 FOR ALL TABLES EXCEPT TABLE (dump_test.test_table, dump_test.test_second_table);', + 'CREATE PUBLICATION pub9 FOR ALL TABLES EXCEPT (TABLE dump_test.test_table, dump_test.test_second_table);', regexp => qr/^ - \QCREATE PUBLICATION pub9 FOR ALL TABLES EXCEPT TABLE (ONLY dump_test.test_table, ONLY dump_test.test_second_table) WITH (publish = 'insert, update, delete, truncate');\E + \QCREATE PUBLICATION pub9 FOR ALL TABLES EXCEPT (TABLE ONLY dump_test.test_table, ONLY dump_test.test_second_table) WITH (publish = 'insert, update, delete, truncate');\E /xm, like => { %full_runs, section_post_data => 1, }, }, @@ -3235,9 +3235,9 @@ my %tests = ( 'CREATE PUBLICATION pub10' => { create_order => 92, create_sql => - 'CREATE PUBLICATION pub10 FOR ALL TABLES EXCEPT TABLE (dump_test.test_inheritance_parent);', + 'CREATE PUBLICATION pub10 FOR ALL TABLES EXCEPT (TABLE dump_test.test_inheritance_parent);', regexp => qr/^ - \QCREATE PUBLICATION pub10 FOR ALL TABLES EXCEPT TABLE (ONLY dump_test.test_inheritance_parent, ONLY dump_test.test_inheritance_child) WITH (publish = 'insert, update, delete, truncate');\E + \QCREATE PUBLICATION pub10 FOR ALL TABLES EXCEPT (TABLE ONLY dump_test.test_inheritance_parent, ONLY dump_test.test_inheritance_child) WITH (publish = 'insert, update, delete, truncate');\E /xm, like => { %full_runs, section_post_data => 1, }, }, diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c index 523d3f39fc5..cbdd02cd01b 100644 --- a/src/bin/psql/tab-complete.in.c +++ b/src/bin/psql/tab-complete.in.c @@ -2333,13 +2333,13 @@ match_previous_words(int pattern_id, else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL")) COMPLETE_WITH("SEQUENCES", "TABLES"); else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL", "TABLES")) - COMPLETE_WITH("EXCEPT TABLE ("); + COMPLETE_WITH("EXCEPT ( TABLE"); else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL", "TABLES", "EXCEPT")) - COMPLETE_WITH("TABLE ("); - else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL", "TABLES", "EXCEPT", "TABLE")) - COMPLETE_WITH("("); + COMPLETE_WITH("( TABLE"); + else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL", "TABLES", "EXCEPT", "(")) + COMPLETE_WITH("TABLE"); /* Complete "ALTER PUBLICATION FOR TABLE" with ", ..." */ - else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL", "TABLES", "EXCEPT", "TABLE", "(")) + else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL", "TABLES", "EXCEPT", "(", "TABLE")) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables); else if (Matches("ALTER", "PUBLICATION", MatchAny, "ADD|DROP|SET", "TABLES", "IN", "SCHEMA")) COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas @@ -3738,16 +3738,16 @@ match_previous_words(int pattern_id, else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL")) COMPLETE_WITH("TABLES", "SEQUENCES"); else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES")) - COMPLETE_WITH("EXCEPT TABLE (", "WITH ("); + COMPLETE_WITH("EXCEPT ( TABLE", "WITH ("); else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT")) - COMPLETE_WITH("TABLE ("); - else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "TABLE")) - COMPLETE_WITH("("); - else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "TABLE", "(")) + COMPLETE_WITH("( TABLE"); + else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "(")) + COMPLETE_WITH("TABLE"); + else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "(", "TABLE")) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables); - else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "TABLE", "(", MatchAnyN) && ends_with(prev_wd, ',')) + else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "(", "TABLE", MatchAnyN) && ends_with(prev_wd, ',')) COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables); - else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "TABLE", "(", MatchAnyN) && !ends_with(prev_wd, ',')) + else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "ALL", "TABLES", "EXCEPT", "(", "TABLE", MatchAnyN) && !ends_with(prev_wd, ',')) COMPLETE_WITH(")"); else if (Matches("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLES")) COMPLETE_WITH("IN SCHEMA"); diff --git a/src/test/regress/expected/publication.out b/src/test/regress/expected/publication.out index a220f48b285..f117c75f2af 100644 --- a/src/test/regress/expected/publication.out +++ b/src/test/regress/expected/publication.out @@ -218,7 +218,7 @@ Not-null constraints: --------------------------------------------- SET client_min_messages = 'ERROR'; -- Specify table list in the EXCEPT TABLE clause of a FOR ALL TABLES publication -CREATE PUBLICATION testpub_foralltables_excepttable FOR ALL TABLES EXCEPT TABLE (testpub_tbl1, testpub_tbl2); +CREATE PUBLICATION testpub_foralltables_excepttable FOR ALL TABLES EXCEPT (TABLE testpub_tbl1, testpub_tbl2); \dRp+ testpub_foralltables_excepttable Publication testpub_foralltables_excepttable Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description @@ -229,7 +229,7 @@ Except tables: "public.testpub_tbl2" -- Specify table in the EXCEPT TABLE clause of a FOR ALL TABLES publication -CREATE PUBLICATION testpub_foralltables_excepttable1 FOR ALL TABLES EXCEPT TABLE (testpub_tbl1); +CREATE PUBLICATION testpub_foralltables_excepttable1 FOR ALL TABLES EXCEPT (TABLE testpub_tbl1); \dRp+ testpub_foralltables_excepttable1 Publication testpub_foralltables_excepttable1 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description @@ -259,7 +259,7 @@ Except Publications: --------------------------------------------- -- Replace the existing EXCEPT TABLE list (testpub_tbl1) with a new -- EXCEPT TABLE list containing only (testpub_tbl2). -ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES EXCEPT TABLE (testpub_tbl2); +ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES EXCEPT (TABLE testpub_tbl2); \dRp+ testpub_foralltables_excepttable Publication testpub_foralltables_excepttable Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description @@ -309,7 +309,7 @@ ALTER PUBLICATION testpub_forall_tbls_seqs SET ALL SEQUENCES; (1 row) -- fail - SET ALL TABLES/SEQUENCES is not allowed for a 'FOR TABLE' publication -ALTER PUBLICATION testpub_fortable SET ALL TABLES EXCEPT TABLE (testpub_tbl1); +ALTER PUBLICATION testpub_fortable SET ALL TABLES EXCEPT (TABLE testpub_tbl1); ERROR: publication "testpub_fortable" does not support ALL TABLES operations DETAIL: This operation requires the publication to be defined as FOR ALL TABLES/SEQUENCES or to be empty. ALTER PUBLICATION testpub_fortable SET ALL TABLES; @@ -319,7 +319,7 @@ ALTER PUBLICATION testpub_fortable SET ALL SEQUENCES; ERROR: publication "testpub_fortable" does not support ALL SEQUENCES operations DETAIL: This operation requires the publication to be defined as FOR ALL TABLES/SEQUENCES or to be empty. -- fail - SET ALL TABLES/SEQUENCES is not allowed for a schema publication -ALTER PUBLICATION testpub_forschema SET ALL TABLES EXCEPT TABLE (pub_test.testpub_nopk); +ALTER PUBLICATION testpub_forschema SET ALL TABLES EXCEPT (TABLE pub_test.testpub_nopk); ERROR: publication "testpub_forschema" does not support ALL TABLES operations DETAIL: This operation requires the publication to be defined as FOR ALL TABLES/SEQUENCES or to be empty. ALTER PUBLICATION testpub_forschema SET ALL TABLES; @@ -359,7 +359,7 @@ Tables: "public.testpub_tbl_parent" -- List the parent table in the EXCEPT TABLE clause (without ONLY or '*') -CREATE PUBLICATION testpub5 FOR ALL TABLES EXCEPT TABLE (testpub_tbl_parent); +CREATE PUBLICATION testpub5 FOR ALL TABLES EXCEPT (TABLE testpub_tbl_parent); \dRp+ testpub5 Publication testpub5 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description @@ -370,7 +370,7 @@ Except tables: "public.testpub_tbl_parent" -- EXCEPT with '*': list the table and all its descendants in the EXCEPT TABLE clause -CREATE PUBLICATION testpub6 FOR ALL TABLES EXCEPT TABLE (testpub_tbl_parent *); +CREATE PUBLICATION testpub6 FOR ALL TABLES EXCEPT (TABLE testpub_tbl_parent *); \dRp+ testpub6 Publication testpub6 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description @@ -381,7 +381,7 @@ Except tables: "public.testpub_tbl_parent" -- EXCEPT with ONLY: list the table in the EXCEPT TABLE clause, but not its descendants -CREATE PUBLICATION testpub7 FOR ALL TABLES EXCEPT TABLE (ONLY testpub_tbl_parent); +CREATE PUBLICATION testpub7 FOR ALL TABLES EXCEPT (TABLE ONLY testpub_tbl_parent); \dRp+ testpub7 Publication testpub7 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description @@ -399,7 +399,7 @@ DROP PUBLICATION testpub3, testpub4, testpub5, testpub6, testpub7; SET client_min_messages = 'ERROR'; CREATE TABLE testpub_root(a int) PARTITION BY RANGE(a); CREATE TABLE testpub_part1 PARTITION OF testpub_root FOR VALUES FROM (0) TO (100); -CREATE PUBLICATION testpub8 FOR ALL TABLES EXCEPT TABLE (testpub_root); +CREATE PUBLICATION testpub8 FOR ALL TABLES EXCEPT (TABLE testpub_root); \dRp+ testpub8; Publication testpub8 Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description @@ -427,7 +427,7 @@ Except Publications: "testpub8" Number of partitions: 1 (Use \d+ to list them.) -CREATE PUBLICATION testpub9 FOR ALL TABLES EXCEPT TABLE (testpub_part1); +CREATE PUBLICATION testpub9 FOR ALL TABLES EXCEPT (TABLE testpub_part1); ERROR: cannot use publication EXCEPT clause for relation "testpub_part1" DETAIL: This operation is not supported for individual partitions. CREATE TABLE tab_main (a int) PARTITION BY RANGE(a); @@ -1623,7 +1623,7 @@ RESET client_min_messages; ALTER PUBLICATION testpub5 OWNER TO regress_publication_user3; SET ROLE regress_publication_user3; -- fail - SET ALL TABLES/SEQUENCES on a publication requires superuser privileges -ALTER PUBLICATION testpub5 SET ALL TABLES EXCEPT TABLE (testpub_tbl1); -- fail +ALTER PUBLICATION testpub5 SET ALL TABLES EXCEPT (TABLE testpub_tbl1); -- fail ERROR: must be superuser to set ALL TABLES ALTER PUBLICATION testpub5 SET ALL TABLES; -- fail ERROR: must be superuser to set ALL TABLES diff --git a/src/test/regress/sql/publication.sql b/src/test/regress/sql/publication.sql index 22e0a30b5c7..99a4868eaec 100644 --- a/src/test/regress/sql/publication.sql +++ b/src/test/regress/sql/publication.sql @@ -110,10 +110,10 @@ SELECT pubname, puballtables FROM pg_publication WHERE pubname = 'testpub_forall --------------------------------------------- SET client_min_messages = 'ERROR'; -- Specify table list in the EXCEPT TABLE clause of a FOR ALL TABLES publication -CREATE PUBLICATION testpub_foralltables_excepttable FOR ALL TABLES EXCEPT TABLE (testpub_tbl1, testpub_tbl2); +CREATE PUBLICATION testpub_foralltables_excepttable FOR ALL TABLES EXCEPT (TABLE testpub_tbl1, testpub_tbl2); \dRp+ testpub_foralltables_excepttable -- Specify table in the EXCEPT TABLE clause of a FOR ALL TABLES publication -CREATE PUBLICATION testpub_foralltables_excepttable1 FOR ALL TABLES EXCEPT TABLE (testpub_tbl1); +CREATE PUBLICATION testpub_foralltables_excepttable1 FOR ALL TABLES EXCEPT (TABLE testpub_tbl1); \dRp+ testpub_foralltables_excepttable1 -- Check that the table description shows the publications where it is listed -- in the EXCEPT TABLE clause @@ -124,7 +124,7 @@ CREATE PUBLICATION testpub_foralltables_excepttable1 FOR ALL TABLES EXCEPT TABLE --------------------------------------------- -- Replace the existing EXCEPT TABLE list (testpub_tbl1) with a new -- EXCEPT TABLE list containing only (testpub_tbl2). -ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES EXCEPT TABLE (testpub_tbl2); +ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES EXCEPT (TABLE testpub_tbl2); \dRp+ testpub_foralltables_excepttable -- Clear the EXCEPT TABLE list, making the publication include all tables. @@ -149,12 +149,12 @@ ALTER PUBLICATION testpub_forall_tbls_seqs SET ALL SEQUENCES; \dRp+ testpub_forall_tbls_seqs -- fail - SET ALL TABLES/SEQUENCES is not allowed for a 'FOR TABLE' publication -ALTER PUBLICATION testpub_fortable SET ALL TABLES EXCEPT TABLE (testpub_tbl1); +ALTER PUBLICATION testpub_fortable SET ALL TABLES EXCEPT (TABLE testpub_tbl1); ALTER PUBLICATION testpub_fortable SET ALL TABLES; ALTER PUBLICATION testpub_fortable SET ALL SEQUENCES; -- fail - SET ALL TABLES/SEQUENCES is not allowed for a schema publication -ALTER PUBLICATION testpub_forschema SET ALL TABLES EXCEPT TABLE (pub_test.testpub_nopk); +ALTER PUBLICATION testpub_forschema SET ALL TABLES EXCEPT (TABLE pub_test.testpub_nopk); ALTER PUBLICATION testpub_forschema SET ALL TABLES; ALTER PUBLICATION testpub_forschema SET ALL SEQUENCES; @@ -175,13 +175,13 @@ CREATE PUBLICATION testpub3 FOR TABLE testpub_tbl_parent; CREATE PUBLICATION testpub4 FOR TABLE ONLY testpub_tbl_parent; \dRp+ testpub4 -- List the parent table in the EXCEPT TABLE clause (without ONLY or '*') -CREATE PUBLICATION testpub5 FOR ALL TABLES EXCEPT TABLE (testpub_tbl_parent); +CREATE PUBLICATION testpub5 FOR ALL TABLES EXCEPT (TABLE testpub_tbl_parent); \dRp+ testpub5 -- EXCEPT with '*': list the table and all its descendants in the EXCEPT TABLE clause -CREATE PUBLICATION testpub6 FOR ALL TABLES EXCEPT TABLE (testpub_tbl_parent *); +CREATE PUBLICATION testpub6 FOR ALL TABLES EXCEPT (TABLE testpub_tbl_parent *); \dRp+ testpub6 -- EXCEPT with ONLY: list the table in the EXCEPT TABLE clause, but not its descendants -CREATE PUBLICATION testpub7 FOR ALL TABLES EXCEPT TABLE (ONLY testpub_tbl_parent); +CREATE PUBLICATION testpub7 FOR ALL TABLES EXCEPT (TABLE ONLY testpub_tbl_parent); \dRp+ testpub7 RESET client_min_messages; @@ -194,11 +194,11 @@ DROP PUBLICATION testpub3, testpub4, testpub5, testpub6, testpub7; SET client_min_messages = 'ERROR'; CREATE TABLE testpub_root(a int) PARTITION BY RANGE(a); CREATE TABLE testpub_part1 PARTITION OF testpub_root FOR VALUES FROM (0) TO (100); -CREATE PUBLICATION testpub8 FOR ALL TABLES EXCEPT TABLE (testpub_root); +CREATE PUBLICATION testpub8 FOR ALL TABLES EXCEPT (TABLE testpub_root); \dRp+ testpub8; \d testpub_part1 \d testpub_root -CREATE PUBLICATION testpub9 FOR ALL TABLES EXCEPT TABLE (testpub_part1); +CREATE PUBLICATION testpub9 FOR ALL TABLES EXCEPT (TABLE testpub_part1); CREATE TABLE tab_main (a int) PARTITION BY RANGE(a); -- Attaching a partition is not allowed if the partitioned table appears in a @@ -1037,7 +1037,7 @@ RESET client_min_messages; ALTER PUBLICATION testpub5 OWNER TO regress_publication_user3; SET ROLE regress_publication_user3; -- fail - SET ALL TABLES/SEQUENCES on a publication requires superuser privileges -ALTER PUBLICATION testpub5 SET ALL TABLES EXCEPT TABLE (testpub_tbl1); -- fail +ALTER PUBLICATION testpub5 SET ALL TABLES EXCEPT (TABLE testpub_tbl1); -- fail ALTER PUBLICATION testpub5 SET ALL TABLES; -- fail ALTER PUBLICATION testpub5 SET ALL SEQUENCES; -- fail diff --git a/src/test/subscription/t/037_except.pl b/src/test/subscription/t/037_except.pl index 13b99eda258..9878d4eefd0 100644 --- a/src/test/subscription/t/037_except.pl +++ b/src/test/subscription/t/037_except.pl @@ -31,7 +31,7 @@ sub test_except_root_partition # publish_via_partition_root setting. $node_publisher->safe_psql( 'postgres', qq( - CREATE PUBLICATION tap_pub_part FOR ALL TABLES EXCEPT TABLE (root1) WITH (publish_via_partition_root = $pubviaroot); + CREATE PUBLICATION tap_pub_part FOR ALL TABLES EXCEPT (TABLE root1) WITH (publish_via_partition_root = $pubviaroot); INSERT INTO root1 VALUES (1), (101); )); $node_subscriber->safe_psql('postgres', @@ -94,7 +94,7 @@ $node_subscriber->safe_psql( # to verify exclusion behavior for inherited tables, including the effect of # ONLY in the EXCEPT TABLE clause. $node_publisher->safe_psql('postgres', - "CREATE PUBLICATION tab_pub FOR ALL TABLES EXCEPT TABLE (tab1, parent, only parent1)" + "CREATE PUBLICATION tab_pub FOR ALL TABLES EXCEPT (TABLE tab1, parent, only parent1)" ); # Create a logical replication slot to help with later tests. @@ -158,7 +158,7 @@ $node_subscriber->safe_psql('postgres', "CREATE TABLE tab2 (a int)"); # Replace the EXCEPT TABLE list so that only tab2 is excluded. $node_publisher->safe_psql('postgres', - "ALTER PUBLICATION tab_pub SET ALL TABLES EXCEPT TABLE (tab2)"); + "ALTER PUBLICATION tab_pub SET ALL TABLES EXCEPT (TABLE tab2)"); # Refresh the subscription so the subscriber picks up the updated # publication definition and initiates table synchronization. @@ -231,7 +231,7 @@ test_except_root_partition('true'); # FOR TABLE. $node_publisher->safe_psql( 'postgres', qq( - CREATE PUBLICATION tap_pub1 FOR ALL TABLES EXCEPT TABLE (tab1); + CREATE PUBLICATION tap_pub1 FOR ALL TABLES EXCEPT (TABLE tab1); CREATE PUBLICATION tap_pub2 FOR TABLE tab1; INSERT INTO tab1 VALUES(1); )); -- 2.43.0