On Mon, 16 Feb 2026 at 11:55, David G. Johnston
<[email protected]> wrote:
>
> 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.

I have removed these as they follow the existing row filter rules
already mentioned.

>>
>>
>> 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”.

Modified

>>
>>
>> 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).

Updated with few changes. Let me know if it did not convey the same
meaning, I will use your exact wording.

> 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.

Removed this to avoid confusion.

> + * 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;

Modified, I have left the no children left behind as the child
specified in the except clause will be skipped if it is not included
via another publication.

> 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.

I have removed the newly added comment i.e.:
* If the relation is part of EXCEPT TABLE list of a publication,
* the 'publish' variable is already set to false.
I have retained the other one as it was an existing comment.

> + * explicitly specified in the EXCEPT claus of the given publication.
> s.b., "clause"

Fixed this.

Thanks for the comments, these are addressed in the v45 version posted at [1].
[1] - 
https://www.postgresql.org/message-id/CALDaNm11LKbC2epEyHOvD6H_ONqLqhDQk7sXWwcneyhrTbFaTw%40mail.gmail.com

Regards,
Vignesh


Reply via email to