Re: Binary support for pgoutput plugin
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Dave Cramer <davecramer@gmail.com>
Cc: David Fetter <david@fetter.org>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2019-06-04T20:38:35Z
Lists: pgsql-hackers
Hi, On 2019-06-04 15:47:04 -0400, Dave Cramer wrote: > On Mon, 3 Jun 2019 at 20:54, David Fetter <david@fetter.org> wrote: > > > On Mon, Jun 03, 2019 at 10:49:54AM -0400, Dave Cramer wrote: > > > Is there a reason why pgoutput sends data in text format? Seems to > > > me that sending data in binary would provide a considerable > > > performance improvement. > > > > Are you seeing something that suggests that the text output is taking > > a lot of time or other resources? > > > > Actually it's on the other end that there is improvement. Parsing text > takes much longer for almost everything except ironically text. It's on both sides, I'd say. E.g. float (until v12), timestamp, bytea are all much more expensive to convert from binary to text. > To be more transparent there is some desire to use pgoutput for something > other than logical replication. Change Data Capture clients such as > Debezium have a requirement for a stable plugin which is shipped with core > as this is always available in cloud providers offerings. There's no reason > that I am aware of that they cannot use pgoutput for this. Except that that's not pgoutput's purpose, and we shouldn't make it meaningfully more complicated or slower to achieve this. Don't think there's a conflict in this case though. > There's also no reason that I am aware that binary outputs can't be > supported. Well, it *does* increase version dependencies, and does make replication more complicated, because type oids etc cannot be relied to be the same on source and target side. > The protocol would have to change slightly and I am working > on a POC patch. Hm, what would have to be changed protocol wise? IIRC that'd just be a different datum type? Or is that what you mean? pq_sendbyte(out, 't'); /* 'text' data follows */ IIRC there was code for the binary protocol in a predecessor of pgoutput. I think if we were to add binary output - and I think we should - we ought to only accept a patch if it's also used in core. Greetings, Andres Freund
Commits
-
Weaken type-OID-matching checks in array_recv and record_recv.
- 670c0a1d474b 14.0 landed
-
Fix construction of updated-columns bitmap in logical replication.
- e8de627a3e05 11.9 landed
- d5daae47db5e 14.0 landed
- 71e561bd4bc2 12.4 landed
- 39d6aec1927c 10.14 landed
- 2f1f189cf880 13.0 landed
-
Allow logical replication to transfer data in binary format.
- 9de77b545313 14.0 landed
-
Phase 2 pgindent run for v12.
- 8255c7a5eeba 12.0 cited