On Thu, 16 May 2024 at 17:29, Robert Haas <robertmh...@gmail.com> wrote: > You're probably not going to like this answer, but I feel like this is > another sign that you're trying to use the protocol extensibility > facilities in the wrong way. In my first reply to the thread, I > proposed having the client send _pq_.protocol_set=1 in that startup > message. If the server accepts that message, then you can send > whatever set of message types are associated with that option, which > could include messages to list known settings, as well as messages to > set them. Alternatively, if we used a wire protocol bump for this, you > could request version 3.1 and everything that I just said still > applies. In other words, I feel that if you had adopted the design > that I proposed back in March, or some variant of it, the problem > you're having now wouldn't exist.
I don't really understand the benefit of your proposal over option 2 that I proposed. Afaict you're proposing that for e.g. compression we first set _pq_.supports_compression=1 in the StartupMessage and use that to do feature detection, and then after we get the response we send ParameterSet("compression", "gzip"). To me this is pretty much identical to option 2, except that it introduces an extra round trip for no benefit (as far as I can see). Why not go for option 2 and send _pq_.compression=gzip in the StartupMessage directly. > IMHO, we need to negotiate the language that we're going to use to > communicate before we start communicating. We should find out which > protocol version we're using, and what protocol options are accepted, > based on sending a StartupMessage and receiving a reply. Then, after > that, having established a common language, we can do whatever. I > think you're trying to meld those two steps into one, which is > understandable from the point of view of saving a round trip, but I > just don't see it working out well. I think not increasing the number of needed round trips in the startup of a connection is extremely important. I think it's so important that I honestly don't think we should merge a protocol change that introduces an extra round trip without a VERY good reason, and this round trip should only be needed when actually using the feature. > What we can do in the startup > message is extremely limited, because any startup messages we generate > can't break existing servers, and also because of the concerns I > raised earlier about leaving room for more extension in the future. > Once we get past the startup message negotiation, the sky's the limit! Sure, what we can do in the StartupMessage is extremely limited, but what it does allow is passing arbitrary key value pairs to the server. But by only using _pq_.feature_name=1, we're effectively only using the key part of the key value pair. Limiting ourselves even more, by throwing half of our communication channel away, seems like a bad idea to me. But maybe I'm just not understanding the problem you're seeing with using the value too.