Re: Proposal to allow setting cursor options on Portals - Mailing list pgsql-hackers
| From | Jelte Fennema-Nio |
|---|---|
| Subject | Re: Proposal to allow setting cursor options on Portals |
| Date | |
| Msg-id | CAGECzQSZ43JMjA8QEJoF9DCdTO0GQeR2qyhouQciSG2ik40Yhg@mail.gmail.com Whole thread Raw |
| In response to | Re: Proposal to allow setting cursor options on Portals (Jacob Champion <jacob.champion@enterprisedb.com>) |
| Responses |
Re: Proposal to allow setting cursor options on Portals
|
| List | pgsql-hackers |
On Wed, 10 Dec 2025 at 18:41, Jacob Champion <jacob.champion@enterprisedb.com> wrote: > I think it'd be helpful for proposals to describe why a minor version > bump was chosen over a protocol extension parameter (or vice versa), > so that we can begin to develop some consensus. Agreed. > With the > minor-version strategy, if we added new bits in 3.6, clients who just > wanted those new bits would then have to implement support for every > feature in versions 3.4, 3.5, and 3.6 just to improve that one use > case, and that incentive mismatch leads to more ossification IMO. I think in this optional bitmap field case, there's no work for the client to "implement" it. It can simply request 3.3, but not send the bitmap field. Similarly for my proposed GoAway message, a client can simply ignore that message completely when it receives it. If we keep the features that are bundled with a protocol version bump of the kind where a client, either has to do nothing to implement it, or at worst has to ignore the contents of a new message/field. Then implementing support becomes so trivial for clients that I don't think it'd be a hurdle for client authors to implement support for 3.3, 3.4, 3.5 and if they only wanted a feature from the 3.6 protocol.^1 I'll call these things "no-op implementations" from now on. > I've talked about it face-to-face with people, but to go on the public > record: I don't think this is a wise use of a minor version upgrade > strategy. I prefer protocol architectures that introduce separate > extensions first, then periodically bundle the critical and > highly-used extensions into a new minor version once they're sure that > _everyone_ should support those things. I think we disagree on this. I think the downside of using protocol extensions for everything is that we then end up with N*N different combinations of features in the wild that servers and clients need to deal with. We have to start to define what happens when features interact, but either of them is not enabled. With incrementing versions you don't have that problem, which results in simpler logic in the spec, servers and clients. Finally, because we don't have any protocol extensions yet. All clients still need to build infrastructure for them, including libpq. So I'd argue that if we make such "no-op implementation" features use protocol extensions, then it'd be more work for everyone. > I know that 3.2 didn't do that. My view of 3.2 is that it was a big > compromise to get some things unstuck, so overall I'm glad we have it > -- but now that we have it, I'd rather that 3.next be more > intentional. > Plus I think it's unwise to introduce a 3.3 before we're > confident that 3.2 can be widely deployed, and I'm trying to put > effort into the latter for 19, so that I'm not just sitting here > gatekeeping. I'm not sure what you mean with this. People use libpq18 and PG18, and I've heard no complaints about protocol problems. So I think it was a success. Do you mean widely deployed by default? Why exactly does that matter for 3.3? Anything that stands default deployment in the way for 3.2, will continue to stand default deployment in the way for 3.3. Personally, if we flip the default in e.g. 5 years from now. I'd much rather have it be flipped to a very nice 3.6 protocol, than still only having the single new feature that was added in 3.2. > IETF has a bunch of related case studies [1,2,3] that might be useful > reading, even if we decide that their experience differs heavily from > ours. I gave them a skim and they seem like a good read (which I'll do later). But I'm not sure part of them you thought was actionable for the discussion about version bumps vs protocol extensions. (I did see useful stuff for the grease thread, but that seems better to discuss there) ^1: You and I only talked about clients above, but obviously there's also proxies and other servers that implement the protocol to consider. If a feature that is "no-op implementation" on the client is a complicated implementation on the proxy/server then maybe a protocol extension is indeed the better choice. I think for GoAway it's trivial to "no-op implement" too on the proxy/server. For this cursor option proposal it's less clear cut imo. Proxies can probably simply forward the message to the server, although maybe PgBouncer would want to throw an error when a client uses a hold cursor (but it also doesn't do that for SQL level hold cursors, so that seems like an optional enhancement). Other servers might not even support hold cursors, but then they could simply throw a clear error (like pgbouncer would do). If throwing an error is an acceptable server implementation, then I think a "no-op implementation" is again trivial.
pgsql-hackers by date: