RE: Added schema level support for publication. - Mailing list pgsql-hackers

From houzj.fnst@fujitsu.com
Subject RE: Added schema level support for publication.
Date
Msg-id OS0PR01MB57164EAC2B7703A24DA99EC894BA9@OS0PR01MB5716.jpnprd01.prod.outlook.com
Whole thread Raw
In response to RE: Added schema level support for publication.  ("houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>)
Responses Re: Added schema level support for publication.  (Greg Nancarrow <gregn4422@gmail.com>)
RE: Added schema level support for publication.  ("houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>)
List pgsql-hackers
On Wednesday, October 13, 2021 10:49 AM Hou, Zhijie wrote:
> On Tuesday, October 12, 2021 9:15 PM vignesh C <vignesh21@gmail.com>
> > Attached v40 patch has the fix for the above comments.
> 
> Thanks for the update, I have some minor issues about partition related
> behavior.
> 
> 1)
> 
> Tang tested and discussed this issue with me.
> The testcase is:
> We publish a schema and there is a partition in the published schema. If
> publish_via_partition_root is on and the partition's parent table is not in the
> published schema, neither the change on the partition nor the parent table will
> not be published.
> 
> But if we publish by FOR TABLE partition and set publish_via_partition_root to
> on, the change on the partition will be published. So, I think it'd be better to
> publish the change on partition for FOR ALL TABLES IN SCHEMA case if its parent
> table
> is not published in the same publication.
> 
> It seems we should pass publication oid to the GetSchemaPublicationRelations()
> and add some check like the following:
> 2)
> I think a partitioned table could also be a partition which should not be
> appended to the list. I think we should also filter these cases here by same
> check in 1).

After some offline discussion with Vignesh and Amit.
I found my proposed fix can be improved because it brings some overhead to
functions which could be invoked many times for the same publication. Now, I
think it'd be better to add this check in GetAllSchemaPublicationRelations and
GetPublicationRelations.

Besides, I found we misunderstood the flag PUBLICATION_PART_ROOT it means:
"ROOT: only the table explicitly mentioned in the publication" We cannot use it
as a flag to judge whether do the partition filtering, I think we need to pass
the actual pubviaroot flag.

Based on the V40 patchset, attaching the Top-up patch which try to fix the
partition issue in a cleaner way.

Best regards,
Hou zj


Attachment

pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: Reset snapshot export state on the transaction abort
Next
From: "houzj.fnst@fujitsu.com"
Date:
Subject: RE: Data is copied twice when specifying both child and parent table in publication