Thread

  1. Re: Proposal: Conflict log history table for Logical Replication

    Dilip Kumar <dilipbalaut@gmail.com> — 2025-12-19T04:25:03Z

    On Fri, Dec 19, 2025 at 5:35 AM Peter Smith <smithpb2250@gmail.com> wrote:
    >
    > On Thu, Dec 18, 2025 at 8:09 PM Dilip Kumar <dilipbalaut@gmail.com> wrote:
    > >
    > > On Tue, Dec 16, 2025 at 9:51 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
    > > >
    > > > On Mon, Dec 15, 2025 at 5:11 PM Dilip Kumar <dilipbalaut@gmail.com> wrote:
    > >
    > > >
    > > > 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
    > >
    > > So I have put more thought on this and here is what I am proposing
    > >
    > > 1) Subscription Parameter: Son in first version the subscription
    > > parameter will be named 'conflict_log_format' which will accept
    > > 'log/table/both' default option would be log.
    > > 2) If conflict_log_format = log is provided then we do not need to do
    > > anything as this would work by default
    > > 3) If conflict_log_format = table/both is provided then we will
    > > generate a internal table name i.e. conflict_log_table_$subid$ and the
    > > table will be created in the current schema
    > > 4) in pg_subscription we will still keep 2 field a) namespace id of
    > > the conflict log table b) the conflict log format = 'log/table'both'
    > > 5) If option is table/both the name can be generated on the fly
    > > whether we are creating the table or inserting conflict into the
    > > table.
    >
    > IIUC, previously you had a "none" value which was a way to "turn off"
    > any CLT previously defined. How can users do that now with
    > log/table/both? Would they have to reassign (the default) "log"? That
    > seems a bit strange.
    
    Previously we were supporting only conflict log tables and by default
    it was always sent to log.  And "none" was used for clearing the
    conflict log table option; it was never meant for not logging anywhere
    it was meant to say that there is no conflict log table.  Now also we
    can have another option as none but I intentionally avoided it
    considering we want to support the case where we don't want to log it
    at all, maybe that's not a bad idea either.  Let's see what others
    think about it.
    
    -- 
    Regards,
    Dilip Kumar
    Google