Re: Conflict detection and logging in logical replication
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Michail Nikolaev <michail.nikolaev@gmail.com>
Cc: "Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>, "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>,
shveta malik <shveta.malik@gmail.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-16T04:23:25Z
Lists: pgsql-hackers
On Wed, Aug 14, 2024 at 7:45 PM Michail Nikolaev <michail.nikolaev@gmail.com> wrote: > > > This is as expected, and we have documented this in the code comments. We don't > > need to report a conflict if the conflicting tuple has been removed or updated > > due to concurrent transaction. The same is true if the transaction that > > inserted the conflicting tuple is rolled back before CheckAndReportConflict(). > > We don't consider such cases as a conflict. > > That seems a little bit strange to me. > > From the perspective of a user, I expect that if a change from publisher is not applied - I need to know about it from the logs. > In the above conditions where a concurrent tuple insertion is removed or rolled back before CheckAndReportConflict, the tuple inserted by apply will remain. There is no need to report anything in such cases as apply was successful. > But in that case, I will not see any information about conflict in the logs in SOME cases. But in OTHER cases I will see it. > However, in both cases the change from publisher was not applied. > And these cases are just random and depend on the timing of race conditions. It is not something I am expecting from the database. > > Maybe it is better to report about the fact that event from publisher was not applied because of conflict and then try to > provide additional information about the conflict itself? > > Or possibly in case we were unable to apply the event and not able to find the conflict, we should retry the event processing? > Per my understanding, we will apply or the conflict will be logged and retried where required (unique key violation). -- With Regards, Amit Kapila.
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