RE: logical replication empty transactions - Mailing list pgsql-hackers

From shiy.fnst@fujitsu.com
Subject RE: logical replication empty transactions
Date
Msg-id OSZPR01MB6310ED77C425FF3986B3C2CEFD089@OSZPR01MB6310.jpnprd01.prod.outlook.com
Whole thread Raw
In response to Re: logical replication empty transactions  (Ajin Cherian <itsajin@gmail.com>)
Responses Re: logical replication empty transactions  (Ajin Cherian <itsajin@gmail.com>)
List pgsql-hackers
On Fri, Mar 4, 2022 9:41 AM Ajin Cherian <itsajin@gmail.com> wrote:
> 
> I have split the patch into two. I have kept the logic of skipping
> streaming changes in the second patch.
> I will work on the second patch once we can figure out a solution for
> the COMMIT PREPARED after restart problem.
> 

Thanks for updating the patch.

A comment on v23-0001 patch.

@@ -1429,6 +1520,19 @@ pgoutput_message(LogicalDecodingContext *ctx, ReorderBufferTXN *txn,
     if (in_streaming)
         xid = txn->xid;
 
+    /*
+     * Output BEGIN if we haven't yet.
+     * Avoid for non-transactional messages.
+     */
+    if (in_streaming || transactional)
+    {
+        PGOutputTxnData *txndata = (PGOutputTxnData *) txn->output_plugin_private;
+
+        /* Send BEGIN if we haven't yet */
+        if (txndata && !txndata->sent_begin_txn)
+            pgoutput_send_begin(ctx, txn);
+    }
+
     OutputPluginPrepareWrite(ctx, true);
     logicalrep_write_message(ctx->out,
                              xid,

I think we don't need to send BEGIN if in_streaming is true, right? The first
patch doesn't skip streamed transaction, so should we modify
+    if (in_streaming || transactional)
to
+    if (!in_streaming && transactional)
?

Regards,
Shi yu


pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: Optionally automatically disable logical replication subscriptions on error
Next
From: Amit Kapila
Date:
Subject: Re: Handle infinite recursion in logical replication setup