Re: Binary support for pgoutput plugin
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Dave Cramer <davecramer@gmail.com>, Daniel Gustafsson <daniel@yesql.se>, Petr Jelinek <petr@2ndquadrant.com>, Alvaro Herrera <alvherre@2ndquadrant.com>, Michael Paquier <michael@paquier.xyz>, Dmitry Dolgov <9erthalion6@gmail.com>, Thomas Munro <thomas.munro@gmail.com>, Tomas Vondra <tomas.vondra@2ndquadrant.com>, Petr Jelinek <petr.jelinek@2ndquadrant.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2020-07-15T01:41:13Z
Lists: pgsql-hackers
Hi, On 2020-07-14 19:46:52 -0400, Tom Lane wrote: > Andres Freund <andres@anarazel.de> writes: > > There's also send/receive functions that do not work across systems, > > unfortunately :(. In particular record and array send functions embed > > type oids and their receive functions verify that they match the local > > system. Which basically means that if there's any difference in oid > > assignment order between two systems that they will not allow to > > send/recv such data between them :(. > > It's not a problem particularly for built-in types, but I agree > there's an issue for extension types. I'm not so sure. That's true for builtin types within a single major version, but not necessarily across major versions. Not that I can immediately recall cases where we renumbered type oids. It also assumes that the type specification exactly matches between the source / target system. It's probably not a great idea to try to use send/recv for meaningfully different types, but it doesn't seem to crazy to e.g. allow to e.g. change varchar to text while doing a major version upgrade over logical rep. What is the gain in having these checks? recv functions need to be safe against arbitrary input, so a type crosscheck doesn't buy additional safety in that regard. Not that a potential attacker couldn't just change the content anyways? > > I've several times suggested that we should remove those type checks in > > recv, as they afaict don't provide any actual value. But unfortunately > > there hasn't been much response to that. See e.g. > > https://postgr.es/m/20160426001713.hbqdiwvf4mkzkg55%40alap3.anarazel.de > > Maybe we could compromise by omitting the check if both OIDs are > outside the built-in range? Hm. That'd be a lot better than the current situation. So I'd definitely go for that if that's what we can agree on. 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