Re: DOCS - Clarify the publication 'publish_via_partition_root' default value. - Mailing list pgsql-hackers

From Peter Smith
Subject Re: DOCS - Clarify the publication 'publish_via_partition_root' default value.
Date
Msg-id CAHut+Ptz=byEuVf3ThEma6KmuVyxPVjNaD2nR9ozFgY3wP1CBQ@mail.gmail.com
Whole thread Raw
In response to Re: DOCS - Clarify the publication 'publish_via_partition_root' default value.  (Chao Li <li.evan.chao@gmail.com>)
Responses Re: DOCS - Clarify the publication 'publish_via_partition_root' default value.
List pgsql-hackers
On Fri, Dec 12, 2025 at 12:32 PM Chao Li <li.evan.chao@gmail.com> wrote:
>
>
>
> > On Dec 12, 2025, at 07:12, Jacob Champion <jacob.champion@enterprisedb.com> wrote:
> >
> > On Thu, Dec 11, 2025 at 12:22 PM Peter Smith <smithpb2250@gmail.com> wrote:
> >>> Why not just say clearly what the default value is?
> >>>
> >>> PSA: a patch to do that.
> >
> > LGTM. (In fact I've read that paragraph three times and still cannot
> > get it to stick in my head, despite having done a fair amount of
> > thinking about publish_via_partition_root, so if you have further
> > improvement ideas I'm all ears.)
> >

Yeah, I proposed only a very small patch instead of a rewrite only
because I thought it would have a better chance of acceptance, not
because I had any love for the rest of that paragraph.

>
> My feeling is that the preceding long sentence has described both sides expect explicitly mentioning true and false,
whichmakes the following sentence, no matter the original version and the patched version sounds slightly redundant. So
Ithink maybe we can rework the entire paragraph like: 
>
> ```
> This parameter controls how changes to a partitioned table (or any of its partitions) are published. When set to
true,changes are published using the identity and schema of the partitioned table. When set to false (the default),
changesare published using the identity and schema of the individual partitions 
> where the changes actually occurred. Enabling this option allows the changes to be replicated into a non-partitioned
tableor into a partitioned table whose 
> partition structure differs from that of the publisher.
> ```
>

AFAIK, Chao's improved text is mostly good, except I think there might
be some nuances when there are multiple levels of partitioning.

For example, maybe you need to make this change?
BEFORE
When set to true, changes are published using the identity and schema
of the partitioned table
AFTER
When set to true, changes are published using the identity and schema
of the root partitioned table
~~~

Experiment:

CREATE TABLE t1(a int) PARTITION BY RANGE(a);
|
+-- CREATE TABLE t1_p1 PARTITION OF t1 FOR VALUES FROM (0) TO (5)
PARTITION BY RANGE(a);
|   |
|   + CREATE TABLE t1_p1_p1 PARTITION OF t1_p1 FOR VALUES FROM (0) TO (3);
| + CREATE TABLE t1_p1_p2 PARTITION OF t1_p1 FOR VALUES FROM (3) TO (5);
|
+-- CREATE TABLE t1_p2 PARTITION OF t1 FOR VALUES FROM (5) TO (10);


CREATE PUBLICATION pub1 FOR ALL TABLES WITH (publish_via_partition_root = true);


Subscriber:
CREATE SUBSCRIPTION sub1 CONNECTION 'dbname=test_pub' PUBLICATION pub1;
test_sub=# CREATE TABLE t1(a  int);
test_sub=# CREATE TABLE t1_p1(a  int);
test_sub=# CREATE TABLE t1_p2(a  int);
test_sub=# CREATE TABLE t1_p1_p1(a  int);
test_sub=# CREATE TABLE t1_p1_p2(a  int);

Publisher:
Here we are inserting into a sub-partitioned table.

INSERT INTO t1_p1 VALUES (2);

Result (subscriber)
test_sub=#
test_sub=# select * from t1;
 a
---
 2
(1 row)

test_sub=# select * from t1_p1;
 a
---
(0 rows)

Notice the data writes using the *root* partitioned table. Not just
the nearest partitioned table.

======
Kind Regards,
Peter Smith.
Fujitsu Australia



pgsql-hackers by date:

Previous
From: Chao Li
Date:
Subject: Fixes a typo in tablecmd
Next
From: Michael Paquier
Date:
Subject: Re: [Proposal] Adding callback support for custom statistics kinds