| From: | Peter Smith <smithpb2250(at)gmail(dot)com> |
|---|---|
| To: | Nisha Moond <nisha(dot)moond412(at)gmail(dot)com> |
| Cc: | 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-06-10 04:36:44 |
| Message-ID: | CAHut+Pu0-A92MyRxFCLNQFYgAKGrKbYChG_p4ARogEfbAtMm8A@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi Nisha.
Some review comments for v11-0001.
(I had no new review comments for v11-0002, v11-0003)
======
doc/src/sgml/ref/create_publication.sgml
1.
+ <para>
+ For <literal>FOR TABLES IN SCHEMA</literal> publications, the
+ <literal>EXCEPT</literal> clause is schema-scoped: the exclusion applies
+ only in the context of the schema to which it was attached. If a table
+ listed in the <literal>EXCEPT</literal> clause is later moved to a
+ different schema using <command>ALTER TABLE ... SET SCHEMA</command>,
+ the exclusion is removed. The table will then be published if its new
+ schema is part of a publication. If the table is moved back to
+ the original schema, the exclusion is not restored; the user must
+ re-establish it explicitly using <command>ALTER PUBLICATION</command>.
+ Dropping a table always removes it from the <literal>EXCEPT</literal>
+ list regardless of publication type.
+ </para>
1a.
I felt this should be moved up to be the 2nd paragraph of the "EXCEPT"
part. Subsequent information about
inheritance/partitions/multi-publications is common for both EXCEPTS.
~
1b.
All that info about "If a table..." seemed more relevant to ALTER
PUBLICATION than to CREATE PUBLICATION, so I didn't think we needed
those details here.
======
src/backend/commands/publicationcmds.c
RemovePublicationExceptForRelation:
2.
+/*
+ * Remove any EXCEPT clause entries for a relation from schema publications.
+ * Called when a table changes schema (ALTER TABLE ... SET SCHEMA), so that
+ * a schema-scoped exclusion does not silently follow the table to its new
+ * schema. FOR ALL TABLES publications are skipped because their EXCEPT
+ * clause is publication-scoped, not schema-scoped, so that exclusion should
+ * persist regardless of what schema the table is in.
+ */
Instead of saying "FOR ALL TABLES publications are skipped", rephrase
that to be something like: "This problem does not apply to FOR ALL
TABLES publications because..."
Anyway, I think you can remove that note from the function comment,
and instead put it here:
+ if (!is_schema_publication(pubid))
+ continue;
~~~
3.
+{
+ List *pubids;
+ ListCell *lc;
+ ObjectAddress obj;
+
+ pubids = GetRelationExcludedPublications(relid);
+
+ foreach(lc, pubids)
Using a `foreach_oid` loop might be tidier here.
======
src/backend/commands/tablecmds.c
4.
table_close(classRel, RowExclusiveLock);
+
+ /*
+ * Remove any EXCEPT clause entries for this relation from schema
+ * publications. A schema-scoped exclusion is no longer meaningful once
+ * the table moves to a different schema.
+ */
+ if (rel->rd_rel->relkind == RELKIND_RELATION ||
+ rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
+ RemovePublicationExceptForRelation(RelationGetRelid(rel));
Should this code be put prior to the table_close, where the other
dependent stuff is also removed?
======
src/backend/parser/gram.y
5.
+ /* For TABLES_IN_CUR_SCHEMA: leave except_tables for execution time */
Isn't this repeating exactly what you already said in the other
comment ("For TABLES_IN_CUR_SCHEMA the schema name is not yet
known...")?
======
src/test/regress/sql/publication.sql
6.
+-- test for EXCEPT clause with schema publication (bug: excluded
table was incorrectly returned)
+SELECT * FROM test_gpt(ARRAY['pub_schema_except'],
'gpt_test_sch.tbl_sch'); -- no result (excluded)
+SELECT * FROM test_gpt(ARRAY['pub_schema_except'],
'gpt_test_sch.tbl_sch2'); -- one row (included via schema)
+
Is that "(bug: ...)" comment necessary?
======
Kind Regards,
Peter Smith.
Fujitsu Australia
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Kyotaro Horiguchi | 2026-06-10 04:53:35 | Re: [PATCH] Fix minRecoveryPoint not advanced past checkpoint in CreateRestartPoint |
| Previous Message | Quan Zongliang | 2026-06-10 04:10:45 | Re: log_postmaster_stats |