| From: | vignesh C <vignesh21(at)gmail(dot)com> |
|---|---|
| To: | shveta malik <shveta(dot)malik(at)gmail(dot)com> |
| Cc: | Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Peter Smith <smithpb2250(at)gmail(dot)com>, Zsolt Parragi <zsolt(dot)parragi(at)percona(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
| Subject: | Re: Support EXCEPT for TABLES IN SCHEMA publications |
| Date: | 2026-08-18 13:27:44 |
| Message-ID: | CALDaNm3GLMVr5nNdEjvLjDWrcnfg+etrXNF+gkxyDuO=NtRasw@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Tue, 18 Aug 2026 at 10:24, vignesh C <vignesh21(at)gmail(dot)com> wrote:
>
> The v28 version of the attached patch handles the changes to throw an
> error when a partition table is both included and excluded through an
> EXCEPT clause, keeping the behavior consistent with inheritance
> tables.
Few comments:
1) we are throwing this error at AlterPublicationSchemaExceptTables
which can be done from the grammar that way it need not process many
thing and then throw an error so late:
+ /*
+ * Dropping a schema from a publication removes all its EXCEPT
entries via
+ * cascade. The concept of "drop all schema tables from the publication
+ * EXCEPT these ones" is not supported.
+ */
+ if (stmt->action == AP_DropObjects)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("EXCEPT clause is not
supported with DROP in ALTER PUBLICATION")));
Attached a patch to handle this from gram.y file.
2) WITH options tab completion missing for:
create publication pub1 for tables in schema sch1 except ( table sch1.t1 )
3) CheckExceptConflicts prototype appears twice:
static void CheckSchemaListNotExcluded(Oid pubid, List *schemaidlist);
+static void CheckExceptConflicts(Oid pubid, List *except_rels,
+ List
*cross_schema_children,
+ List
*explicitrelids, List *pubschemas,
+ bool
existing_except_kept);
static void PublicationAddExceptTables(Oid pubid, List *except_pubtables,
and
-
List *except_rels);
+
List *except_rels,
+
bool existing_except_kept);
+static void CheckExceptConflicts(Oid pubid, List *except_rels,
+ List
*cross_schema_children,
+ List
*explicitrelids, List *pubschemas,
+ bool
existing_except_kept);
4) We have the following check in 0002 patch:
/*
* XXX EXCEPT with SET is not currently implemented. Workaround: DROP and
* re-ADD the schema with the desired EXCEPT list.
*/
if (stmt->action == AP_SetObjects)
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("EXCEPT clause is not supported with SET in
ALTER PUBLICATION"),
errhint("Drop and re-add the schema with the desired
EXCEPT list.")));
Let's move this check to 0001 patch
5) Similarly we should add a similar check for ALTER PUBLICATION ...
ADD TABLES IN SCHEMA EXCEPT to throw an error from the first patch.
6) code compiles without this include, we can remove this:
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 17035fb4d15..14520a5ccab 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -58,6 +58,7 @@
#include "nodes/makefuncs.h"
#include "nodes/nodeFuncs.h"
#include "parser/parser.h"
+#include "utils/builtins.h"
#include "utils/datetime.h"
#include "utils/xml.h"
7) Here the publicationcmds.h should be included before repack.h to
maintain the ordering:
#include "commands/extension.h"
#include "commands/repack.h"
+#include "commands/publicationcmds.h"
#include "commands/sequence.h"
8) We can keep the same parameter ordering in both
AlterPublicationSchemas and AlterPublicationSchemaExceptTables
functions, except_pubtables and schemaidlist are placed differently in
both:
+static void AlterPublicationSchemas(AlterPublicationStmt *stmt,
+
HeapTuple tup, List *schemaidlist,
+
List *except_pubtables);
+static void AlterPublicationSchemaExceptTables(AlterPublicationStmt *stmt,
+
HeapTuple tup,
+
List *except_pubtables,
+
List *schemaidlist);
Regards,
Vignesh
| Attachment | Content-Type | Size |
|---|---|---|
| Drop_Tables_throw_error_from_parser.patch | application/octet-stream | 3.8 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Amit Langote | 2026-08-18 13:42:14 | Re: PG19 FK fast path: OOB write and missed FK checks during batched |
| Previous Message | Pierre Forstmann | 2026-08-18 13:13:36 | Re: BUG #19597: getQuadrant: impossible case is reachable |