pgsql: libpq: Grease the protocol by default
Jacob Champion <jchampion@postgresql.org>
From: Jacob Champion <jchampion@postgresql.org>
To: pgsql-committers@lists.postgresql.org
Date: 2026-02-23T18:58:07Z
Lists: pgsql-hackers
libpq: Grease the protocol by default Send PG_PROTOCOL_GREASE and _pq_.test_protocol_negotiation, which were introduced in commit d8d7c5dc8, by default, and fail the connection if the server attempts to claim support for them. The hope is to provide feedback to noncompliant implementations and gain confidence in our ability to advance the protocol. (See the other commit for details.) To help end users navigate the situation, a link to our documentation that explains the behavior is displayed. We append this to the error message when the NegotiateProtocolVersion response is incorrect, or when the peer sends an error during startup that appears to be grease- related. It's still possible for users to connect to servers that don't support protocol negotiation, by adding max_protocol_version=3.0 to their connection strings. Only the default connection behavior is impacted. This commit is tracked as a PG19 open item and will be reverted before RC1. (The implementation here doesn't handle negotiation with later server versions, so it can't be released into the wild as a five-year-supported feature. But an improved implementation might be able to do so, in the future...) Author: Jelte Fennema-Nio <postgres@jeltef.nl> Co-authored-by: Jacob Champion <jacob.champion@enterprisedb.com> Discussion: https://postgr.es/m/DDPR5BPWH1RJ.1LWAK6QAURVAY%40jeltef.nl Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/4966bd3ed95e0d02bf220c4bad2b292963827dd4 Modified Files -------------- doc/src/sgml/libpq.sgml | 17 ++++++++ doc/src/sgml/protocol.sgml | 11 +++++ src/interfaces/libpq/fe-connect.c | 51 +++++++++++++++++++----- src/interfaces/libpq/fe-misc.c | 18 +++++++++ src/interfaces/libpq/fe-protocol3.c | 51 ++++++++++++++++++++++-- src/interfaces/libpq/libpq-int.h | 1 + src/test/modules/libpq_pipeline/libpq_pipeline.c | 6 +-- 7 files changed, 140 insertions(+), 15 deletions(-)
Commits
-
pg_upgrade: Use max_protocol_version=3.0 for older servers
- c47744ede01c 14.23 landed
- e726620d208e 15.18 landed
- a38ed212ff23 16.14 landed
- ad7fc3f1f83f 17.10 landed
- 1b2773179f31 18.4 landed
- a60a103386a1 19 (unreleased) landed
-
libpq: Grease the protocol by default
- 4966bd3ed95e 19 (unreleased) cited
-
libpq: Prepare for protocol grease during 19beta
- d8d7c5dc8f74 19 (unreleased) cited