diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml
index 61ffe804ee8..92d179b5ee0 100644
--- a/doc/src/sgml/catalogs.sgml
+++ b/doc/src/sgml/catalogs.sgml
@@ -7096,7 +7096,7 @@ SCRAM-SHA-256$<iteration count>:&l
True if the table is excluded from the publication. See
- EXCEPT TABLE.
+ EXCEPT.
diff --git a/doc/src/sgml/logical-replication.sgml b/doc/src/sgml/logical-replication.sgml
index 72c8d3d59bd..23b268273b9 100644
--- a/doc/src/sgml/logical-replication.sgml
+++ b/doc/src/sgml/logical-replication.sgml
@@ -119,7 +119,7 @@
. When a publication is
created with FOR ALL TABLES, a table or set of tables can
be explicitly excluded from publication using the
- EXCEPT TABLE
+ EXCEPT
clause.
diff --git a/doc/src/sgml/ref/alter_publication.sgml b/doc/src/sgml/ref/alter_publication.sgml
index 7f0e46380cc..59b34dd0a38 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 ( except_table_object [, ... ] ) ]
ALL SEQUENCES
and publication_drop_object is one of:
@@ -49,7 +49,11 @@ ALTER PUBLICATION name RENAME TO and except_table_object is:
- [ ONLY ] table_name [ * ]
+ TABLE table_object [, ... ]
+
+and table_object is:
+
+ [ ONLY ] table_name [ * ]
@@ -71,7 +75,7 @@ ALTER PUBLICATION name RENAME TO FOR ALL SEQUENCES or
FOR ALL TABLES, optionally using
- EXCEPT TABLE to exclude specific tables. The
+ EXCEPT to exclude specific tables. The
SET ALL TABLES clause can transform an empty publication,
or one defined for ALL SEQUENCES (or both
ALL TABLES and ALL SEQUENCES), into
@@ -80,13 +84,13 @@ ALTER PUBLICATION name RENAME TO ALL TABLES (or both
ALL TABLES and ALL SEQUENCES), into a
publication defined for ALL SEQUENCES. In addition,
- SET ALL TABLES can be used to update the
- EXCEPT TABLE list of a FOR ALL TABLES
- publication. If EXCEPT TABLE is specified with a list of
- tables, the existing exclusion list is replaced with the specified tables.
- If EXCEPT TABLE is omitted, the existing exclusion list
- is cleared. The SET clause, when used with a publication
- defined with FOR TABLE or
+ SET ALL TABLES can be used to update the tables specified
+ in the EXCEPT clause of a
+ FOR ALL TABLES publication. If EXCEPT
+ is specified with a list of tables, the existing exclusion list is replaced
+ with the specified tables. If EXCEPT is omitted, the
+ existing exclusion list is cleared. The SET clause, when
+ used with a publication defined with FOR TABLE or
FOR TABLES IN SCHEMA, replaces the list of tables/schemas
in the publication with the specified list; the existing tables or schemas
that were present in the publication will be removed.
@@ -263,9 +267,9 @@ ALTER PUBLICATION mypublication SET TABLE users (user_id, firstname, lastname),
- Replace the publication's EXCEPT TABLE list:
+ Replace the table list in the publication's EXCEPT clause:
-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..99b08aefea5 100644
--- a/doc/src/sgml/ref/create_publication.sgml
+++ b/doc/src/sgml/ref/create_publication.sgml
@@ -32,7 +32,7 @@ CREATE PUBLICATION nameand publication_all_object is one of:
- ALL TABLES [ EXCEPT TABLE ( except_table_object [, ... ] ) ]
+ ALL TABLES [ EXCEPT ( except_table_object [, ... ] ) ]
ALL SEQUENCES
and table_and_columns is:
@@ -41,7 +41,11 @@ CREATE PUBLICATION nameand except_table_object is:
- [ ONLY ] table_name [ * ]
+ TABLE table_object [, ... ]
+
+and table_object is:
+
+ [ ONLY ] table_name [ * ]
@@ -169,7 +173,7 @@ CREATE PUBLICATION name
Marks the publication as one that replicates changes for all tables in
the database, including tables created in the future. Tables listed in
- EXCEPT TABLE are excluded from the publication.
+ EXCEPT clause are excluded from the publication.
@@ -190,7 +194,7 @@ CREATE PUBLICATION name
- EXCEPT TABLE
+ EXCEPT
This clause specifies a list of tables to be excluded from the
@@ -206,7 +210,7 @@ CREATE PUBLICATION name
For partitioned tables, only the root partitioned table may be specified
- in EXCEPT TABLE. Doing so excludes the root table and
+ in EXCEPT. Doing so excludes the root table and
all of its partitions from replication. The optional
ONLY and * has no effect for
partitioned tables.
@@ -214,7 +218,7 @@ CREATE PUBLICATION name
There can be a case where a subscription includes multiple publications.
In such a case, a table or partition that is included in one publication
- and listed in the EXCEPT TABLE clause of another is
+ and listed in the EXCEPT clause of another is
considered included for replication.
@@ -532,7 +536,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 +545,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/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c
index c92ff3f51c3..a3192f19d35 100644
--- a/src/backend/catalog/pg_publication.c
+++ b/src/backend/catalog/pg_publication.c
@@ -831,7 +831,7 @@ publication_add_schema(Oid pubid, Oid schemaid, bool if_not_exists)
* Internal function to get the list of publication oids for a relation.
*
* If except_flag is true, returns the list of publication that specified the
- * relation in EXCEPT clause; otherwise, returns the list of publications
+ * relation in the EXCEPT clause; otherwise, returns the list of publications
* in which relation is included.
*/
static List *
@@ -868,7 +868,7 @@ GetRelationIncludedPublications(Oid relid)
}
/*
- * Gets list of publication oids which has relation in EXCEPT clause.
+ * Gets list of publication oids which has relation in the EXCEPT clause.
*/
List *
GetRelationExcludedPublications(Oid relid)
@@ -1001,7 +1001,7 @@ GetAllTablesPublications(void)
* publication.
*
* For a FOR ALL TABLES publication, the returned list excludes tables mentioned
- * in EXCEPT TABLE clause.
+ * in the EXCEPT clause.
*/
List *
GetAllPublicationRelations(Oid pubid, char relkind, bool pubviaroot)
diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c
index 9fb80fdff08..440adb356ad 100644
--- a/src/backend/commands/publicationcmds.c
+++ b/src/backend/commands/publicationcmds.c
@@ -1280,7 +1280,7 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
{
/*
* In FOR ALL TABLES mode, relations are tracked as exclusions
- * (EXCEPT TABLES). Fetch the current excluded relations so they
+ * (EXCEPT clause). Fetch the current excluded relations so they
* can be reconciled with the specified EXCEPT list.
*
* This applies only if the existing publication is already
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 0fea726cdd5..9e86596dc05 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; }
;
@@ -11439,8 +11439,8 @@ PublicationExceptObjSpec:
pub_except_obj_list: PublicationExceptObjSpec
{ $$ = list_make1($1); }
- | pub_except_obj_list ',' PublicationExceptObjSpec
- { $$ = lappend($1, $3); }
+ | pub_except_obj_list ',' opt_table PublicationExceptObjSpec
+ { $$ = lappend($1, $4); }
;
/*****************************************************************************
@@ -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..d34240073bb 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -4625,14 +4625,14 @@ getPublications(Archive *fout)
* Get the list of tables for publications specified in the EXCEPT
* TABLE clause.
*
- * Although individual EXCEPT TABLE entries could be stored in
+ * Although individual table entries in EXCEPT list could be stored in
* PublicationRelInfo, dumpPublicationTable cannot be used to emit
* them, because there is no ALTER PUBLICATION ... ADD command to add
- * individual table entries to the EXCEPT TABLE list.
+ * individual table entries to the EXCEPT list.
*
- * Therefore, the approach is to dump the complete EXCEPT TABLE list
- * in a single CREATE PUBLICATION statement. PublicationInfo is used
- * to collect this information, which is then emitted by
+ * Therefore, the approach is to dump the complete EXCEPT list in a
+ * single CREATE PUBLICATION statement. PublicationInfo is used to
+ * collect this information, which is then emitted by
* dumpPublication().
*/
if (fout->remoteVersion >= 190000)
@@ -4708,16 +4708,16 @@ dumpPublication(Archive *fout, const PublicationInfo *pubinfo)
appendPQExpBufferStr(query, " FOR ALL TABLES");
- /* Include EXCEPT TABLE clause if there are except_tables. */
+ /* Include EXCEPT (TABLE) clause if there are except_tables. */
for (SimplePtrListCell *cell = pubinfo->except_tables.head; cell; cell = cell->next)
{
TableInfo *tbinfo = (TableInfo *) cell->ptr;
if (++n_except == 1)
- appendPQExpBufferStr(query, " EXCEPT TABLE (");
+ appendPQExpBufferStr(query, " EXCEPT (");
else
appendPQExpBufferStr(query, ", ");
- appendPQExpBuffer(query, "ONLY %s", fmtQualifiedDumpable(tbinfo));
+ appendPQExpBuffer(query, "TABLE ONLY %s", fmtQualifiedDumpable(tbinfo));
}
if (n_except > 0)
appendPQExpBufferStr(query, ")");
diff --git a/src/bin/pg_dump/t/002_pg_dump.pl b/src/bin/pg_dump/t/002_pg_dump.pl
index 051a3d8ea3d..3bc8e51561d 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, 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, TABLE 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/describe.c b/src/bin/psql/describe.c
index d755d25dcf0..4e8ff00394a 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -3206,7 +3206,7 @@ describeOneTableDetails(const char *schemaname,
{
/*
* Skip entries where this relation appears in the
- * publication's EXCEPT TABLE list.
+ * publication's EXCEPT list.
*/
appendPQExpBuffer(&buf,
" AND NOT pr.prexcept\n"
diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c
index adcff1f6ffb..53bf1e21721 100644
--- a/src/bin/psql/tab-complete.in.c
+++ b/src/bin/psql/tab-complete.in.c
@@ -2333,14 +2333,18 @@ 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, "SET", "ALL", "TABLES", "EXCEPT", "(", "TABLE", MatchAnyN) && ends_with(prev_wd, ','))
+ COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
+ else if (Matches("ALTER", "PUBLICATION", MatchAny, "SET", "ALL", "TABLES", "EXCEPT", "(", "TABLE", MatchAnyN) && !ends_with(prev_wd, ','))
+ COMPLETE_WITH(")");
else if (Matches("ALTER", "PUBLICATION", MatchAny, "ADD|DROP|SET", "TABLES", "IN", "SCHEMA"))
COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas
" AND nspname NOT LIKE E'pg\\\\_%%'",
@@ -3738,16 +3742,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..91332e75eeb 100644
--- a/src/test/regress/expected/publication.out
+++ b/src/test/regress/expected/publication.out
@@ -214,11 +214,12 @@ Not-null constraints:
(1 row)
---------------------------------------------
--- EXCEPT TABLE tests for normal tables
+-- EXCEPT clause tests for normal tables
---------------------------------------------
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 TABLE testpub_tbl3 (id serial primary key, data text);
+-- Specify table list in the EXCEPT clause of a FOR ALL TABLES publication
+CREATE PUBLICATION testpub_foralltables_excepttable FOR ALL TABLES EXCEPT (TABLE testpub_tbl1, testpub_tbl2, TABLE testpub_tbl3);
\dRp+ testpub_foralltables_excepttable
Publication testpub_foralltables_excepttable
Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description
@@ -227,9 +228,10 @@ CREATE PUBLICATION testpub_foralltables_excepttable FOR ALL TABLES EXCEPT TABLE
Except tables:
"public.testpub_tbl1"
"public.testpub_tbl2"
+ "public.testpub_tbl3"
--- 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);
+-- Specify table in the EXCEPT clause of a FOR ALL TABLES publication
+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
@@ -239,7 +241,7 @@ Except tables:
"public.testpub_tbl1"
-- Check that the table description shows the publications where it is listed
--- in the EXCEPT TABLE clause
+-- in the EXCEPT clause
\d testpub_tbl1
Table "public.testpub_tbl1"
Column | Type | Collation | Nullable | Default
@@ -254,12 +256,17 @@ Except Publications:
"testpub_foralltables_excepttable"
"testpub_foralltables_excepttable1"
+-- fail - first table in the EXCEPT list should use TABLE keyword
+CREATE PUBLICATION testpub_foralltables_excepttable2 FOR ALL TABLES EXCEPT (testpub_tbl1, testpub_tbl2);
+ERROR: syntax error at or near "testpub_tbl1"
+LINE 1: ..._foralltables_excepttable2 FOR ALL TABLES EXCEPT (testpub_tb...
+ ^
---------------------------------------------
-- SET ALL TABLES/SEQUENCES
---------------------------------------------
--- 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);
+-- Replace the existing table list in the EXCEPT clause (testpub_tbl1,
+-- testpub_tbl2, testpub_tbl3) with 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
@@ -268,7 +275,21 @@ ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES EXCEPT TABLE (
Except tables:
"public.testpub_tbl2"
--- Clear the EXCEPT TABLE list, making the publication include all tables.
+-- Replace the existing table list in the EXCEPT clause (testpub_tbl2) with a
+-- table list containing (testpub_tbl1, testpub_tbl2, testpub_tbl3).
+ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES EXCEPT (TABLE testpub_tbl1, testpub_tbl2, TABLE testpub_tbl3);
+\dRp+ testpub_foralltables_excepttable
+ Publication testpub_foralltables_excepttable
+ Owner | All tables | All sequences | Inserts | Updates | Deletes | Truncates | Generated columns | Via root | Description
+--------------------------+------------+---------------+---------+---------+---------+-----------+-------------------+----------+-------------
+ regress_publication_user | t | f | t | t | t | t | none | f |
+Except tables:
+ "public.testpub_tbl1"
+ "public.testpub_tbl2"
+ "public.testpub_tbl3"
+
+-- Clear the table list in the EXCEPT clause, making the publication include all
+-- tables.
ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES;
\dRp+ testpub_foralltables_excepttable
Publication testpub_foralltables_excepttable
@@ -309,7 +330,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 +340,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;
@@ -329,12 +350,12 @@ ALTER PUBLICATION testpub_forschema SET ALL SEQUENCES;
ERROR: publication "testpub_forschema" does not support ALL SEQUENCES operations
DETAIL: This operation requires the publication to be defined as FOR ALL TABLES/SEQUENCES or to be empty.
RESET client_min_messages;
-DROP TABLE testpub_tbl2;
+DROP TABLE testpub_tbl2, testpub_tbl3;
DROP PUBLICATION testpub_foralltables, testpub_fortable, testpub_forschema, testpub_for_tbl_schema;
DROP PUBLICATION testpub_forall_tbls_seqs, testpub_foralltables_excepttable, testpub_foralltables_excepttable1;
---------------------------------------------
-- Tests for inherited tables, and
--- EXCEPT TABLE tests for inherited tables
+-- EXCEPT clause tests for inherited tables
---------------------------------------------
SET client_min_messages = 'ERROR';
CREATE TABLE testpub_tbl_parent (a int);
@@ -358,8 +379,8 @@ CREATE PUBLICATION testpub4 FOR TABLE ONLY testpub_tbl_parent;
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);
+-- List the parent table in the EXCEPT clause (without ONLY or '*')
+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
@@ -369,8 +390,8 @@ Except tables:
"public.testpub_tbl_child"
"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 *);
+-- EXCEPT with '*': list the table and all its descendants in the EXCEPT clause
+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
@@ -380,8 +401,8 @@ Except tables:
"public.testpub_tbl_child"
"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);
+-- EXCEPT with ONLY: list the table in the EXCEPT clause, but not its descendants
+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
@@ -394,12 +415,12 @@ RESET client_min_messages;
DROP TABLE testpub_tbl_parent, testpub_tbl_child;
DROP PUBLICATION testpub3, testpub4, testpub5, testpub6, testpub7;
---------------------------------------------
--- EXCEPT TABLE tests for partitioned tables
+-- EXCEPT clause tests for partitioned tables
---------------------------------------------
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,12 +448,12 @@ 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);
-- Attaching a partition is not allowed if the partitioned table appears in a
--- publication's EXCEPT TABLE clause.
+-- publication's EXCEPT clause.
ALTER TABLE tab_main ATTACH PARTITION testpub_root FOR VALUES FROM (0) TO (200);
ERROR: cannot attach table "testpub_root" as partition because it is referenced in publication "testpub8" EXCEPT clause
DETAIL: The publication EXCEPT clause cannot contain tables that are partitions.
@@ -1623,7 +1644,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..6bafad27571 100644
--- a/src/test/regress/sql/publication.sql
+++ b/src/test/regress/sql/publication.sql
@@ -106,28 +106,37 @@ SELECT pubname, puballtables FROM pg_publication WHERE pubname = 'testpub_forall
\dRp+ testpub_foralltables
---------------------------------------------
--- EXCEPT TABLE tests for normal tables
+-- EXCEPT clause tests for normal tables
---------------------------------------------
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 TABLE testpub_tbl3 (id serial primary key, data text);
+-- Specify table list in the EXCEPT clause of a FOR ALL TABLES publication
+CREATE PUBLICATION testpub_foralltables_excepttable FOR ALL TABLES EXCEPT (TABLE testpub_tbl1, testpub_tbl2, TABLE testpub_tbl3);
\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);
+-- Specify table in the EXCEPT clause of a FOR ALL TABLES publication
+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
+-- in the EXCEPT clause
\d testpub_tbl1
+-- fail - first table in the EXCEPT list should use TABLE keyword
+CREATE PUBLICATION testpub_foralltables_excepttable2 FOR ALL TABLES EXCEPT (testpub_tbl1, testpub_tbl2);
---------------------------------------------
-- SET ALL TABLES/SEQUENCES
---------------------------------------------
--- 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);
+-- Replace the existing table list in the EXCEPT clause (testpub_tbl1,
+-- testpub_tbl2, testpub_tbl3) with 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.
+-- Replace the existing table list in the EXCEPT clause (testpub_tbl2) with a
+-- table list containing (testpub_tbl1, testpub_tbl2, testpub_tbl3).
+ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES EXCEPT (TABLE testpub_tbl1, testpub_tbl2, TABLE testpub_tbl3);
+\dRp+ testpub_foralltables_excepttable
+
+-- Clear the table list in the EXCEPT clause, making the publication include all
+-- tables.
ALTER PUBLICATION testpub_foralltables_excepttable SET ALL TABLES;
\dRp+ testpub_foralltables_excepttable
@@ -149,23 +158,23 @@ 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;
RESET client_min_messages;
-DROP TABLE testpub_tbl2;
+DROP TABLE testpub_tbl2, testpub_tbl3;
DROP PUBLICATION testpub_foralltables, testpub_fortable, testpub_forschema, testpub_for_tbl_schema;
DROP PUBLICATION testpub_forall_tbls_seqs, testpub_foralltables_excepttable, testpub_foralltables_excepttable1;
---------------------------------------------
-- Tests for inherited tables, and
--- EXCEPT TABLE tests for inherited tables
+-- EXCEPT clause tests for inherited tables
---------------------------------------------
SET client_min_messages = 'ERROR';
CREATE TABLE testpub_tbl_parent (a int);
@@ -174,14 +183,14 @@ CREATE PUBLICATION testpub3 FOR TABLE testpub_tbl_parent;
\dRp+ testpub3
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);
+-- List the parent table in the EXCEPT clause (without ONLY or '*')
+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 *);
+-- EXCEPT with '*': list the table and all its descendants in the EXCEPT clause
+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);
+-- EXCEPT with ONLY: list the table in the EXCEPT clause, but not its descendants
+CREATE PUBLICATION testpub7 FOR ALL TABLES EXCEPT (TABLE ONLY testpub_tbl_parent);
\dRp+ testpub7
RESET client_min_messages;
@@ -189,20 +198,20 @@ DROP TABLE testpub_tbl_parent, testpub_tbl_child;
DROP PUBLICATION testpub3, testpub4, testpub5, testpub6, testpub7;
---------------------------------------------
--- EXCEPT TABLE tests for partitioned tables
+-- EXCEPT clause tests for partitioned tables
---------------------------------------------
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
--- publication's EXCEPT TABLE clause.
+-- publication's EXCEPT clause.
ALTER TABLE tab_main ATTACH PARTITION testpub_root FOR VALUES FROM (0) TO (200);
RESET client_min_messages;
@@ -1037,7 +1046,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..c841f7d2560 100644
--- a/src/test/subscription/t/037_except.pl
+++ b/src/test/subscription/t/037_except.pl
@@ -1,7 +1,7 @@
# Copyright (c) 2026, PostgreSQL Global Development Group
-# Logical replication tests for EXCEPT TABLE publications
+# Logical replication tests for publications with EXCEPT clause
use strict;
use warnings;
use PostgreSQL::Test::Cluster;
@@ -26,12 +26,12 @@ sub test_except_root_partition
{
my ($pubviaroot) = @_;
- # If the root partitioned table is in the EXCEPT TABLE clause, all its
+ # If the root partitioned table is in the EXCEPT clause, all its
# partitions are excluded from publication, regardless of the
# 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',
@@ -48,7 +48,7 @@ sub test_except_root_partition
"INSERT INTO root1 VALUES (2), (102)");
# Verify that data inserted into the partitioned table is not published when
- # it is in the EXCEPT TABLE clause.
+ # it is in the EXCEPT clause.
$result = $node_publisher->safe_psql('postgres',
"SELECT count(*) = 0 FROM pg_logical_slot_get_binary_changes('test_slot', NULL, NULL, 'proto_version', '1', 'publication_names', 'tap_pub_part')"
);
@@ -67,7 +67,7 @@ sub test_except_root_partition
}
# ============================================
-# EXCEPT TABLE test cases for non-partitioned tables and inherited tables.
+# EXCEPT clause test cases for non-partitioned tables and inherited tables.
# ============================================
# Create schemas and tables on publisher
@@ -92,9 +92,9 @@ $node_subscriber->safe_psql(
# Exclude tab1 (non-inheritance case), and also exclude parent and ONLY parent1
# to verify exclusion behavior for inherited tables, including the effect of
-# ONLY in the EXCEPT TABLE clause.
+# ONLY in the EXCEPT 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.
@@ -108,38 +108,38 @@ $node_subscriber->safe_psql('postgres',
# Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tab_sub');
-# Check the table data does not sync for the tables specified in EXCEPT TABLE
+# Check the table data does not sync for the tables specified in the EXCEPT
# clause.
$result =
$node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab1");
is($result, qq(0),
- 'check there is no initial data copied for the tables specified in the EXCEPT TABLE clause'
+ 'check there is no initial data copied for the tables specified in the EXCEPT clause'
);
-# Insert some data into the table listed in the EXCEPT TABLE clause
+# Insert some data into the table listed in the EXCEPT clause
$node_publisher->safe_psql(
'postgres', qq(
INSERT INTO tab1 VALUES(generate_series(11,20));
INSERT INTO child VALUES(generate_series(11,20), generate_series(11,20));
));
-# Verify that data inserted into a table listed in the EXCEPT TABLE clause is
+# Verify that data inserted into a table listed in the EXCEPT clause is
# not published.
$result = $node_publisher->safe_psql('postgres',
"SELECT count(*) = 0 FROM pg_logical_slot_get_binary_changes('test_slot', NULL, NULL, 'proto_version', '1', 'publication_names', 'tab_pub')"
);
is($result, qq(t),
- 'verify no changes for table listed in the EXCEPT TABLE clause are present in the replication slot'
+ 'verify no changes for table listed in the EXCEPT clause are present in the replication slot'
);
# This should be published because ONLY parent1 was specified in the
-# EXCEPT TABLE clause, so the exclusion applies only to the parent table and not
+# EXCEPT clause, so the exclusion applies only to the parent table and not
# to its child.
$node_publisher->safe_psql('postgres',
"INSERT INTO child1 VALUES(generate_series(11,20), generate_series(11,20))"
);
-# Verify that data inserted into a table listed in the EXCEPT TABLE clause is
+# Verify that data inserted into a table listed in the EXCEPT clause is
# not replicated.
$node_publisher->wait_for_catchup('tab_sub');
$result =
@@ -156,9 +156,9 @@ $node_publisher->safe_psql('postgres',
"CREATE TABLE tab2 AS SELECT generate_series(1,10) AS a");
$node_subscriber->safe_psql('postgres', "CREATE TABLE tab2 (a int)");
-# Replace the EXCEPT TABLE list so that only tab2 is excluded.
+# Replace the table list in the EXCEPT clause 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.
@@ -169,19 +169,19 @@ $node_subscriber->safe_psql('postgres',
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tab_sub');
# Verify that initial table synchronization does not occur for tables
-# listed in the EXCEPT TABLE clause.
+# listed in the EXCEPT clause.
$result =
$node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab2");
is($result, qq(0),
- 'check there is no initial data copied for the tables specified in the EXCEPT TABLE clause'
+ 'check there is no initial data copied for the tables specified in the EXCEPT clause'
);
# Verify that table synchronization now happens for tab1. Table tab1 is
-# included now since the EXCEPT TABLE list is only (tab2).
+# included now since the table list of EXCEPT clause is only (tab2).
$result =
$node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab1");
is($result, qq(20),
- 'check that the data is copied as the tab1 is removed from EXCEPT TABLE clause'
+ 'check that the data is copied as the tab1 is removed from EXCEPT clause'
);
# cleanup
@@ -199,7 +199,7 @@ $node_publisher->safe_psql(
));
# ============================================
-# EXCEPT TABLE test cases for partitioned tables
+# EXCEPT clause test cases for partitioned tables
# ============================================
# Setup partitioned table and partitions on the publisher that map to normal
# tables on the subscriber.
@@ -227,11 +227,11 @@ test_except_root_partition('true');
# Test when a subscription is subscribing to multiple publications
# ============================================
-# OK when a table is excluded by pub1 EXCEPT TABLE, but it is included by pub2
+# OK when a table is excluded by pub1 EXCEPT clause, but it is included by pub2
# 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);
));
@@ -247,7 +247,7 @@ $result =
$node_publisher->safe_psql('postgres', "SELECT * FROM tab1 ORDER BY a");
is( $result, qq(1
2),
- "check replication of a table in the EXCEPT TABLE clause of one publication but included by another"
+ "check replication of a table in the EXCEPT clause of one publication but included by another"
);
$node_publisher->safe_psql(
'postgres', qq(
@@ -256,7 +256,7 @@ $node_publisher->safe_psql(
));
$node_subscriber->safe_psql('postgres', qq(TRUNCATE tab1));
-# OK when a table is excluded by pub1 EXCEPT TABLE, but it is included by pub2
+# OK when a table is excluded by pub1 EXCEPT clause, but it is included by pub2
# FOR ALL TABLES.
$node_publisher->safe_psql(
'postgres', qq(
@@ -275,7 +275,7 @@ $result =
$node_publisher->safe_psql('postgres', "SELECT * FROM tab1 ORDER BY a");
is( $result, qq(1
2),
- "check replication of a table in the EXCEPT TABLE clause of one publication but included by another"
+ "check replication of a table in the EXCEPT clause of one publication but included by another"
);
$node_subscriber->safe_psql('postgres', 'DROP SUBSCRIPTION tap_sub');