Re: Proposal: Conflict log history table for Logical Replication

From: vignesh C <vignesh21(at)gmail(dot)com>
To: Dilip Kumar <dilipbalaut(at)gmail(dot)com>
Cc: Nisha Moond <nisha(dot)moond412(at)gmail(dot)com>, Peter Smith <smithpb2250(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, shveta malik <shveta(dot)malik(at)gmail(dot)com>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Proposal: Conflict log history table for Logical Replication
Date: 2026-04-28 06:06:56
Message-ID: CALDaNm14pyu58-B1qdGTiGykoFZ59B=BCQ_28=QJeRHw1Kro8w@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, 21 Apr 2026 at 15:21, Dilip Kumar <dilipbalaut(at)gmail(dot)com> wrote:
>
> On Mon, Apr 20, 2026 at 7:31 PM Nisha Moond <nisha(dot)moond412(at)gmail(dot)com> wrote:
> >
> > On Mon, Apr 20, 2026 at 5:25 PM Nisha Moond <nisha(dot)moond412(at)gmail(dot)com> wrote:
> > >
> > > On Thu, Apr 16, 2026 at 9:24 PM Dilip Kumar <dilipbalaut(at)gmail(dot)com> wrote:
> > > >
> > > > On Fri, Apr 10, 2026 at 4:54 PM Nisha Moond <nisha(dot)moond412(at)gmail(dot)com> wrote:
> > > > >
> > > > > Hi Dilip,
> > > > > I’m planning to review/test the feature patches, but they don’t apply
> > > > > cleanly on the latest HEAD. Could you please rebase them?
> > > > >
> > > > Thanks Nisha. Here is the rebased version
> > >
> > > Thank you Dilip. I reviewed the patches and did basic testing.
> > >
> > > Here are a few comments for the first two patches -
> >
> > Please find further comments for the document patch-0003:
> >
> > 1) File: /doc/src/sgml/logical-replication.sgml
> > + <xref linkend="logical-replication-conflict-log-schema"/>.
> > + </para>
> > +
> > + <table id="logical-replication-conflict-log-schema">
> > + <title>Conflict Log Table Schema</title>
> >
> > The "replica_identity" column is missing from the schema table in docs.
> > ~~~
> >
> > Few minor comments:
> > 2) File: /doc/src/sgml/logical-replication.sgml: couple of typos in
> > below change-
> > - The log format for logical replication conflicts is as follows:
> > + The <link linkend="sql-createsubscription-params-with-conflict-log-destination"><literal>conflict_log_destination</literal></link>
> > + parameter can automatically creates a dedicated conflict log
> > table. This table is created in the dedicated
> > + <literal>pg_conflict</literal> namespace. The name of the
> > conflict log table
> > + is <literal>pg_conflict_&lt;subid&gt;</literal>. The predefined
> > schema of this table is
> > + detailed in
> > + <xref linkend="logical-replication-conflict-log-schema"/>.
> > + </para>
> >
> > 2a) "can automatically creates" / "automatically creates"
> > 2b) there are double spaces after full stop.
> > "conflict log table. This table "
> > " namespace. The name of the conflict"
> > ~~~
> >
> > 3) Commit message typo -
> > Doccumentation patch / Documentation patch
> > ~~~
> >
> > 4) File: /doc/src/sgml/ref/alter_subscription.sgml
> > + When the <link
> > linkend="sql-createsubscription-params-with-conflict-log-destination"><literal>conflict_log_destination</literal></link>
> > + parameter is set to <literal>table</literal> or
> > <literal>all</literal>, the system
> > + automatically creates the internal conflict log table if it
> > does not already
> > + exist.
> >
> > The phrase “if it does not already exist” seems misleading here. The
> > table shouldn’t pre-exist, as it’s always dropped and recreated when
> > conflict_log_destination changes. Let me know if I’m missing any case
> > where it could pre-exist.
> > ~~~
>
> Thanks Nisha for the review. All your comments make sense so I have
> fixed them in the latest patch.

When the owner of a subscription is changed, the ownership of the
subscription itself is updated, but the ownership of the associated
conflict log table remains unchanged.
-- Change the owner of the subscription
postgres=# ALTER SUBSCRIPTION sub3 OWNER TO test;
ALTER SUBSCRIPTION

-- Verify subscription owner
postgres=# SELECT subname, subowner FROM pg_subscription WHERE subname = 'sub3';
subname | subowner
---------+----------
sub3 | 16426
(1 row)

-- Verify conflict log table owner
postgres=# SELECT relname, relowner FROM pg_class WHERE relname =
'pg_conflict_16431';
relname | relowner
-------------------+----------
pg_conflict_16431 | 10
(1 row)

The subscription owner is updated as expected, but the conflict log
table continues to be owned by the original owner.
Is this behavior intentional?

Regards,
Vignesh

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message John Naylor 2026-04-28 06:18:22 Re: [BUG?] macOS (Intel) build warnings: "ranlib: file … has no symbols" for aarch64 objects
Previous Message Amit Langote 2026-04-28 05:58:43 Re: ri_LockPKTuple misleading message