Re: libpq support for NegotiateProtocolVersion
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-10-13T21:00:52Z
Lists: pgsql-hackers
On Thu, Oct 13, 2022 at 10:33:01AM +0200, Peter Eisentraut wrote:
> + if (their_version != conn->pversion)
Shouldn't this be 'their_version < conn->pversion'? If the server supports
a later protocol than what is requested but not all the requested protocol
extensions, I think libpq would still report "protocol version not
supported."
> + appendPQExpBuffer(&conn->errorMessage,
> + libpq_gettext("protocol version not supported by server: client uses %d.%d, server supports %d.%d\n"),
> + PG_PROTOCOL_MAJOR(conn->pversion), PG_PROTOCOL_MINOR(conn->pversion),
> + PG_PROTOCOL_MAJOR(their_version), PG_PROTOCOL_MINOR(their_version));
Should this match the error in postmaster.c and provide the range of
versions the server supports? The FATAL in postmaster.c is for the major
version, but I believe the same information is relevant when a
NegotiateProtocolVersion message is sent.
ereport(FATAL,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("unsupported frontend protocol %u.%u: server supports %u.0 to %u.%u",
> + else
> + appendPQExpBuffer(&conn->errorMessage,
> + libpq_gettext("protocol extension not supported by server: %s\n"), buf.data);
nitpick: s/extension/extensions
What if neither the protocol version nor the requested extensions are
supported? Right now, I think only the unsupported protocol version is
supported in that case, but presumably we could report both pretty easily.
--
Nathan Bossart
Amazon Web Services: https://aws.amazon.com
Commits
-
libpq: Handle NegotiateProtocolVersion message
- bbf9c282ce92 16.0 landed
-
libpq: Correct processing of startup response messages
- dce92e59b1a9 16.0 landed