Thread

  1. 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