RE: Conflict detection and logging in logical replication
Zhijie Hou (Fujitsu) <houzj.fnst@fujitsu.com>
From: "Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>
To: Amit Kapila <amit.kapila16@gmail.com>, shveta malik <shveta.malik@gmail.com>
Cc: "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>, Nisha Moond <nisha.moond412@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>, Dilip Kumar <dilipbalaut@gmail.com>, Jan Wieck <jan@wi3ck.info>, Ashutosh
Bapat <ashutosh.bapat.oss@gmail.com>
Date: 2024-08-19T07:02:19Z
Lists: pgsql-hackers
Attachments
- v17-0001-Detect-and-log-conflicts-in-logical-replication.patch (application/octet-stream) patch v17-0001
On Monday, August 19, 2024 2:40 PM Amit Kapila <amit.kapila16@gmail.com> wrote: > > On Mon, Aug 19, 2024 at 11:54 AM shveta malik <shveta.malik@gmail.com> > wrote: > > > > On Mon, Aug 19, 2024 at 11:37 AM Amit Kapila <amit.kapila16@gmail.com> > wrote: > > > > > > On Mon, Aug 19, 2024 at 9:08 AM shveta malik <shveta.malik@gmail.com> > wrote: > > > > > > > > On Sun, Aug 18, 2024 at 2:27 PM Zhijie Hou (Fujitsu) > > > > <houzj.fnst@fujitsu.com> wrote: > > > > > > > > > > Attach the V16 patch which addressed the comments we agreed on. > > > > > I will add a doc patch to explain the log format after the 0001 is RFC. > > > > > > > > > > > > > Thank You for addressing comments. Please see this scenario: > > > > > > > > create table tab1(pk int primary key, val1 int unique, val2 int); > > > > > > > > pub: insert into tab1 values(1,1,1); > > > > sub: insert into tab1 values(2,2,3); > > > > pub: update tab1 set val1=2 where pk=1; > > > > > > > > Wrong 'replica identity' column logged? shouldn't it be pk? > > > > > > > > ERROR: conflict detected on relation "public.tab1": > > > > conflict=update_exists > > > > DETAIL: Key already exists in unique index "tab1_val1_key", > > > > modified locally in transaction 801 at 2024-08-19 08:50:47.974815+05:30. > > > > Key (val1)=(2); existing local tuple (2, 2, 3); remote tuple (1, > > > > 2, 1); replica identity (val1)=(1). > > > > > > > > > > The docs say that by default replica identity is primary_key [1] > > > (see REPLICA IDENTITY), > > > > yes, I agree. But here the importance of dumping it was to know the > > value of RI as well which is being used as an identification of row > > being updated rather than row being conflicted. Value is logged > > correctly. > > > > Agreed, sorry, I misunderstood the problem reported. I thought the suggestion > was to use 'primary key' instead of 'replica identity' but you pointed out that the > column used in 'replica identity' was wrong. > We should fix this one. Thanks for reporting the bug. I have fixed it and ran pgindent in V17 patch. I also adjusted few comments and fixed a typo. Best Regards, Hou zj
Commits
-
Rename the conflict types for the origin differ cases.
- 640178c92e3f 18.0 landed
-
Doc: explain the log format of logical replication conflicts.
- edcb71258504 18.0 landed
-
Log the conflicts while applying changes in logical replication.
- 9758174e2e5c 18.0 landed
-
Avoid duplicate table scans for cross-partition updates during logical replication.
- a67da49e1d98 18.0 cited