Re: Missing empty transaction optimization in pgoutput plugin
Amit Kapila <amit.kapila16@gmail.com>
From: Amit Kapila <amit.kapila16@gmail.com>
To: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>,
Tomas Vondra <tomas@vondra.me>, Dilip Kumar <dilipbalaut@gmail.com>
Date: 2025-12-08T12:10:53Z
Lists: pgsql-hackers
On Mon, Dec 8, 2025 at 12:19 PM Ashutosh Bapat <ashutosh.bapat.oss@gmail.com> wrote: > > test_decoding output plugin skips sending stream_start and stream_end > if no change from a segment of a streamed transaction is sent > downstream. If no change has been sent downstream across all the > streamed segments it doesn't send commit or abort for that streamed > transaction. But I don't see similar changes in stream related > callbacks in pgoutput output plugin. > > While the changes discussed in thread [1] were committed, those didn't > include this optimization for test_decoding plugin as well. The > optimization was discussed in [2] separately as a bug fix. Maybe > because it wasn't considered as an optimization that time, we may not > have considered it for pgoutput plugin which doesn't have explicit > skip-empty-xacts option. I think the optimization would be useful in > setups where multiple publications and long transactions are common. > Any reason not to have it. > I don't remember any reason why we can't have the same optimization for streamed transactions. IIRC, we implemented this optimization because we got reports for extra messages for short empty-transactions but if you see any practical cases where it could be useful for streamed transactions as well then feel free to propose a patch. -- With Regards, Amit Kapila.
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Skip empty transactions for logical replication.
- d5a9d86d8ffc 15.0 cited