Re: create subscription with (origin = none, copy_data = on)
Shlok Kyal <shlok.kyal.oss@gmail.com>
From: Shlok Kyal <shlok.kyal.oss@gmail.com>
To: vignesh C <vignesh21@gmail.com>
Cc: "Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>, Sergey Tatarintsev <s.tatarintsev@postgrespro.ru>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>,
Amit Kapila <amit.kapila16@gmail.com>
Date: 2025-01-29T12:19:18Z
Lists: pgsql-hackers
Attachments
- v8-0001-Improve-logging-for-data-origin-discrepancies-in-.patch (application/x-patch) patch v8-0001
- v8-PG_17-PG_16-0001-Improve-logging-for-data-origin-discr.patch (application/x-patch) patch v8-0001
- v8-0002-Test-for-Improve-logging-for-data-origin-discrepa.patch (application/x-patch) patch v8-0002
On Wed, 29 Jan 2025 at 15:58, vignesh C <vignesh21@gmail.com> wrote: > > On Fri, 24 Jan 2025 at 09:52, Shlok Kyal <shlok.kyal.oss@gmail.com> wrote: > > > > I have added the test in the latest patch. > > Few comments: > 1) Let's rearrange this query slightly so that the "PT.pubname IN > (<pub-names>)" appears at the end, the reason being that it will > be easy to copy/paste and edit it to include the publications names if > it is at the end: > +++ b/doc/src/sgml/ref/create_subscription.sgml > @@ -534,13 +534,15 @@ CREATE SUBSCRIPTION <replaceable > class="parameter">subscription_name</replaceabl > <programlisting> > # substitute <pub-names> below with your publication name(s) to > be queried > SELECT DISTINCT PT.schemaname, PT.tablename > -FROM pg_publication_tables PT, > +FROM pg_publication_tables PT > + JOIN pg_class C ON (C.relname = PT.tablename) > + JOIN pg_namespace N ON (N.nspname = PT.schemaname), > pg_subscription_rel PS > - JOIN pg_class C ON (C.oid = PS.srrelid) > - JOIN pg_namespace N ON (N.oid = C.relnamespace) > -WHERE N.nspname = PT.schemaname AND > - C.relname = PT.tablename AND > - PT.pubname IN (<pub-names>); > +WHERE C.relnamespace = N.oid AND > + PT.pubname IN (<pub-names>) AND > + (PS.srrelid = C.oid OR > + C.oid IN (SELECT relid FROM pg_partition_ancestors(PS.srrelid) UNION > + SELECT relid FROM pg_partition_tree(PS.srrelid))); > > 2) The same should be handled in the PG17 version patch too. > > 3) Currently the setup is done like: > node_B(table tab_part2 - publication pub_b_a) replicating to > node_A(sub_a_b subscription) > node_A(table tab_main - publication pub_a_c) replicating to node_C(sub_a_c) > > +############################################################################### > +# Specifying origin = NONE and copy_data = on must raise WARNING if > we subscribe > +# to a partitioned table and this table contains any remotely originated data. > +############################################################################### > + > +# create a partition table on node A > +$node_A->safe_psql( > + 'postgres', qq( > +CREATE TABLE tab_main(a int) PARTITION BY RANGE(a); > +CREATE TABLE tab_part1 PARTITION OF tab_main FOR VALUES FROM (0) TO (5); > +CREATE TABLE tab_part2(a int) PARTITION BY RANGE(a); > +CREATE TABLE tab_part2_1 PARTITION OF tab_part2 FOR VALUES FROM (5) TO (10); > +ALTER TABLE tab_main ATTACH PARTITION tab_part2 FOR VALUES FROM (5) to (10); > +)); > + > +# create a table on node B which will act as a source for a partition on node A > +$node_B->safe_psql( > + 'postgres', qq( > > Can we change this like below to make review easier: > node_A(table tab_part2 - publication pub_b_a) replicating to > node_B(sub_a_b subscription) > node_B(table tab_main - publication pub_a_c) replicating to node_C(sub_a_c) > > Also add something similar like above to the comment. > I have addressed the comments. Here is an updated patch. Thanks and Regards, Shlok Kyal
Commits
-
Fix a WARNING for data origin discrepancies.
- b4e0d0c53fab 18.0 landed
- 0ae1245e04ad 17.5 landed
- 1c2a2354c384 16.9 landed