Re: Proposal: Conflict log history table for Logical Replication
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Dilip Kumar <dilipbalaut@gmail.com>
Cc: shveta malik <shveta.malik@gmail.com>,
Masahiko Sawada <sawada.mshk@gmail.com>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-12-16T04:21:17Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Allow logical replication conflicts to be logged to a table.
- a5918fddf10d master landed
-
Avoid orphaned objects dependencies
- 2fbb21170e90 19 (unreleased) cited
On Mon, Dec 15, 2025 at 5:11 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > On Mon, Dec 15, 2025 at 2:55 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > > > > > 3) > > > postgres=# alter subscription sub1 set (conflict_log_table=NULL); > > > ALTER SUBSCRIPTION > > > postgres=# alter subscription sub2 set (conflict_log_table=create); > > > ALTER SUBSCRIPTION > > > postgres=# \d > > > List of relations > > > Schema | Name | Type | Owner > > > --------+---------+-------+-------- > > > public | create | table | shveta > > > public | null | table | shveta > > > > > > > > > It takes reserved keywords and creates tables with those names. It > > > should be restricted. > > > > I somehow assume table creation will be restricted with these names, > > but since we switch from SPI to internal interface its not true > > anymore, need to see how we can handle this. > > While thinking more on this, I was seeing other places where we use > 'heap_create_with_catalog()' so I noticed that we always use the > internally generated name, so wouldn't it be nice to make the conflict > log table as bool and use internally generated name something like > conflict_log_table_$subid$ and we will always create that in current > active searchpath? Thought? > We could do this as a first step. See the proposal in email [1] where we have discussed having two options instead of one. The first option will be conflict_log_format and the values would be log and table. In this case, the table would be an internally generated one. [1] - https://www.postgresql.org/message-id/CAA4eK1KwqE2y%3D_k5Xc%3Def0S5JXG2x%3DoeWpDJ%2B%3D5k6Anzaw2gdw%40mail.gmail.com -- With Regards, Amit Kapila.