Provide for forward compatibility with future minor protocol versions.
authorRobert Haas <rhaas@postgresql.org>
Tue, 21 Nov 2017 18:56:24 +0000 (13:56 -0500)
committerRobert Haas <rhaas@postgresql.org>
Tue, 21 Nov 2017 18:56:24 +0000 (13:56 -0500)
commitae65f6066dc3d19a55f4fdcd3b30003c5ad8dbed
treebe01e58f33a66ebab7f3aad9769641028f2b269f
parentf3b0897a1213f46b4d3a99a7f8ef3a4b32e03572
Provide for forward compatibility with future minor protocol versions.

Previously, any attempt to request a 3.x protocol version other than
3.0 would lead to a hard connection failure, which made the minor
protocol version really no different from the major protocol version
and precluded gentle protocol version breaks.  Instead, when the
client requests a 3.x protocol version where x is greater than 0, send
the new NegotiateProtocolVersion message to convey that we support
only 3.0.  This makes it possible to introduce new minor protocol
versions without requiring a connection retry when the server is
older.

In addition, if the startup packet includes name/value pairs where
the name starts with "_pq_.", assume that those are protocol options,
not GUCs.  Include those we don't support (i.e. all of them, at
present) in the NegotiateProtocolVersion message so that the client
knows they were not understood.  This makes it possible for the
client to request previously-unsupported features without bumping
the protocol version at all; the client can tell from the server's
response whether the option was understood.

It will take some time before servers that support these new
facilities become common in the wild; to speed things up and make
things easier for a future 3.1 protocol version, back-patch to all
supported releases.

Robert Haas and Badrul Chowdhury

Discussion: http://postgr.es/m/BN6PR21MB0772FFA0CBD298B76017744CD1730@BN6PR21MB0772.namprd21.prod.outlook.com
Discussion: http://postgr.es/m/30788.1498672033@sss.pgh.pa.us
doc/src/sgml/protocol.sgml
src/backend/postmaster/postmaster.c