Thread
-
Re: Proposal: Conflict log history table for Logical Replication
vignesh C <vignesh21@gmail.com> — 2025-12-05T03:54:18Z
On Wed, 3 Dec 2025 at 16:57, Dilip Kumar <dilipbalaut@gmail.com> wrote: > > On Wed, Dec 3, 2025 at 9:49 AM shveta malik <shveta.malik@gmail.com> wrote: > > > > > > relid | 16391 > > > schemaname | public > > > relname | conf_tab > > > conflict_type | multiple_unique_conflicts > > > remote_xid | 761 > > > remote_commit_lsn | 0/01761400 > > > remote_commit_ts | 2025-12-02 15:02:07.045935+00 > > > remote_origin | pg_16406 > > > key_tuple | > > > remote_tuple | {"a":2,"b":3,"c":4} > > > local_conflicts | > > > {"{\"xid\":\"773\",\"commit_ts\":\"2025-12-02T15:02:00.640253+00:00\",\"origin\":\"\",\"tuple\":{\"a\":2,\"b\":2,\"c\":2}}","{\"xid\":\" > > > 773\",\"commit_ts\":\"2025-12-02T15:02:00.640253+00:00\",\"origin\":\"\",\"tuple\":{\"a\":3,\"b\":3,\"c\":3}}","{\"xid\":\"773\",\"commit_ts\":\"2025-12-02T > > > 15:02:00.640253+00:00\",\"origin\":\"\",\"tuple\":{\"a\":4,\"b\":4,\"c\":4}}"} > > > > > > > Thanks, it looks good. For the benefit of others, could you include a > > brief note, perhaps in the commit message for now, describing how to > > access or read this array column? We can remove it later. > > Thanks, okay, temporarily I have added in a commit message how we can > fetch the data from the JSON array field. In next version I will add > a test to get the conflict stored in conflict log history table and > fetch from it. Few comments: 1) Currently pg_dump is not dumping conflict_log_table option, I felt it should be included while dumping. 2) Is there a way to unset the conflict log table after we create the subscription with conflict_log_table option 3) Any reason why this table should not be allowed to add to a publication: + /* Can't be conflict log table */ + if (IsConflictLogTable(RelationGetRelid(targetrel))) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("cannot add relation \"%s.%s\" to publication", + get_namespace_name(RelationGetNamespace(targetrel)), + RelationGetRelationName(targetrel)), + errdetail("This operation is not supported for conflict log tables."))); Is the reason like the same table can be a conflict table in the subscriber and prevent corruption in the subscriber 4) I did not find any documentation for this feature, can we include documentation in create_subscription.sgml, alter_subscription.sgml and logical_replication.sgml Regards, Vignesh