RE: Data is copied twice when specifying both child and parent table in publication
Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com>
From: "houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>
To: Peter Smith <smithpb2250@gmail.com>, "wangw.fnst@fujitsu.com" <wangw.fnst@fujitsu.com>
Cc: Amit Kapila <amit.kapila16@gmail.com>, "osumi.takamichi@fujitsu.com" <osumi.takamichi@fujitsu.com>, "shiy.fnst@fujitsu.com" <shiy.fnst@fujitsu.com>, Amit Langote <amitlangote09@gmail.com>, Peter
Eisentraut <peter.eisentraut@enterprisedb.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>, Dilip Kumar <dilipbalaut@gmail.com>, Greg Nancarrow <gregn4422@gmail.com>, vignesh C <vignesh21@gmail.com>
Date: 2022-08-30T02:24:10Z
Lists: pgsql-hackers
On Wednesday, August 10, 2022 7:45 AM Peter Smith <smithpb2250@gmail.com> wrote: > > Here are some more review comments for the HEAD_v8 patch: > > ====== > > 1. Commit message > > If there are two publications, one of them publish a parent table with > (publish_via_partition_root = true) and another publish child table, subscribing > to both publications from one subscription results in two initial replications. It > should only be copied once. > > ~ > > I took a 2nd look at that commit message and it seemed slightly backwards to > me - e.g. don't you really mean for the 'publish_via_partition_root' parameter > to be used when publishing the > *child* table? I'm not sure about this, I think we are trying to fix the bug when 'publish_via_partition_root' is used when publishing the parent table. For this case(via_root used when publishing parent): CREATE PUBLICATION pub1 for TABLE parent with(publish_via_partition_root); CREATE PUBLICATION pub2 for TABLE child; CREATE SUBSCRIPTION sub connect xxx PUBLICATION pub1,pub2; The expected behavior is only the parent table is published, all the changes should be replicated using the parent table's identity. So, we should only do initial sync for the parent table once, but we currently will do table sync for both parent and child which we think is a bug. For another case you mentioned(via_root used when publishing child) CREATE PUBLICATION pub1 for TABLE parent; CREATE PUBLICATION pub2 for TABLE child with (publish_via_partition_root); CREATE SUBSCRIPTION sub connect xxx PUBLICATION pub1,pub2; The expected behavior is only the child table is published, all the changes should be replicated using the child table's identity. We should do table sync only for child tables and is same as the current behavior on HEAD. So, I think there is no bug in this case. Best regards, Hou zj
Commits
-
Avoid syncing data twice for the 'publish_via_partition_root' option.
- 062a84442424 16.0 landed
-
Fix partition table's REPLICA IDENTITY checking on the subscriber.
- 52d5ea9adb01 14.5 cited
-
Prohibit combining publications with different column lists.
- fd0b9dcebda7 15.0 cited
-
Fix double publish of child table's data.
- 3f06c00cf6dc 13.6 landed
- 614b77d65a38 14.2 landed
- 5e97905a2c76 15.0 landed
-
Support adding partitioned tables to publication
- 17b9e7f9fe23 13.0 cited