On Sunday, February 15, 2026, Dilip Kumar <[email protected]> wrote:
> On Mon, Feb 16, 2026 at 8:50 AM vignesh C <[email protected]> wrote: > > > I started looking into the patch, I have a few comments/questions > > 1. > + <para> > + Similarly, if another publication includes the same table with a row > + filter, but it is also covered by a > + <literal>FOR ALL TABLES ... EXCEPT</literal> publication, the table > is > + published without applying the row filter, since row filters cannot > be > + specified for <literal>FOR ALL TABLES ... EXCEPT</literal> > publications > + and such publications are therefore treated as having no row filter. > + </para> > > I did not understand what this paragraph is trying to explain? what > do you mean by it is covered by FOR ALL TABLES ... EXCEPT, does it > mean the relation is not excluded by EXCEPT? I concur the wording is tough to parse. “Covered” is probably not a good word to use. Stick with either included or excluded. In this case, the point being communicated is if two publications include a table and one doesn’t have a where clause a combining subscription will consider the where clause to be a constant true when combining the where clauses using OR. This wording basically already exists in create subscription. This paragraph and the preceding one, which discuss “if another publication exists”, seems out of place in the create publication documentation. This page should be restricted to only those behaviors that manifest when dealing with a single publication, detailing what it produces. > > 4. > +/* > + * Throws an ERROR if multiple publications with exceptions are found. > + * > + * This check is mandatory because logical replication currently does not > + * support subscribing to multiple publications if more than one of them > + * uses an exclusion list. > + */ > > IMHO explaining the reason why this is not supported or giving > reference to any other comments where it is already explained would be > useful. The word “exceptions” needs to be turned into “except clauses” or “exclusions”. > > 5. > + /* > + * If the root ancestor is covered by a FOR ALL TABLES > + * EXCEPT publication that uses > + * publish_via_partition_root, we must publish changes via > + * the root identity. > + */ > + if (root_published_via_exceptpub) > + { > + pub_relid = root_ancestor; > + ancestor_level = list_length(ancestors); > + } > > I find this comment a bit confusing, what does "covered by a FOR ALL > TABLES EXCEPT publication" means? root_published_via_exceptpub … shouldn’t this just be “root_published_via_alltables? It’s the all table clause that prohibits " where" and accepts "except". IOW, it's sufficient to drop mention of except because the nature of the boolean means that 'false == except'. Something Like: When dealing with multiple publications in a subscription, a publish_via_partition_root attribute on an ALL TABLES publication causes the system to direct the data for all subscribed partitions to the partition root, even if other publications do not specify publish_via_partition_root (so long as the partition root in question hasn't been excluded from the ALL TABLES publication). Note: all tables + publish_via_partition_root = false comes to mind here but I'm unable to dive into the sidebar at the moment. It seems like root_published_via_alltables being false covers that case sufficiently though since in effect the root isn't published in that scenario. + * If the relation is a partition, check whether the current + * relation or any of the ancestors is included in the EXCEPT + * TABLE list. If so, do not publish the change. This is done + * irrespective of pubviaroot setting. I don't understand the motivation for pointing out pubviaroot here. Of course a table that is not published doesn't care what 'pub'viaroot says. + * If the top-most ancestor is covered by a 'FOR ALL TABLES + * EXCEPT' publication, we don't need to track per-relation + * metadata here. These publications apply globally and do not + * support row filters or column lists that would require + * specific tracking for this partition. Suggestion: /* Partitions whose top-most ancestor is being published via an ALL TABLES publication need not be individually published via any other publication. Repeated occurrences of a partition take the least restricted definition, which the ALL TABLES publication always provides. I.e., all columns, all rows, no children left behind. */ if (root_published_via_alltables) continue; The last two sentences are inferrable (from the definition/description of the rules of publication combining) and probably should be excluded. If the root is either "except'ed or there is no "publish via partition root" this is false and the subsequent lappend happens per usual. That seems correct. + * explicitly specified in the EXCEPT claus of the given publication. s.b., "clause" David J.
