On Mon, 19 Aug 2024 at 05:44, Robert Haas <robertmh...@gmail.com> wrote: > I feel like what you're really complaining about here is that libpq is > not properly versioned. We've just been calling it libpq.so.5 forever > instead of bumping the version number when we change stuff.
There is PQlibVersion() that can be used for this. Which has existed since 2010, so people can assume it exists. > I just don't see why this particular change is special. I didn't mean to say that it was, and I don't think the problem is enormous either. I mainly meant to say that there is not just a cost to Postgres maintainers when we introduce a new API. There's definitely a cost to users and client authors too. > Also, I kind of wish you had brought this argument up earlier. Maybe > you did and I missed it, but I was under the impression that you were > just arguing that "nobody will notice or care," which is a quite > different argument than what you make here. "nobody will notice or care" was definitely my argument before Jacob responded. Since Jacob his response I realize there are two valid use cases for PQprotocolVersion(): 1. Feature detection. For this my argument still is: people won't notice. Many people won't have bothered to use the function and everyone else will have used >= 3 here. 2. Pinning the protocol version, because they care that the exact protocol details are the same. Here people will have used == 3, and thus their check will fail when we start to return a different version from PQprotocolVersion(). But that's actually what this usecase desires. By creating a new function, we actually break the expectation of these people: i.e. they want the PQprotocolVersion() to return a different version when the protocol changes. Before Jacob responded I only considered the first case. So my argument was indeed basically: Let's reuse this currently useless function with the nice name, because no-one will care. But if people thought that the risk was too high, I didn't see huge downsides to introducing a new API either. But **now I actually feel much more strongly about reusing the same function**. Because by introducing a new function we actually break the users of the second use-case. P.S. The docs for PQprotocolVersion[1] have never said that this function only returns the major protocol version. And by using the word "Currently" it has always suggested that new return values could be introduced later, and thus for feature detection you should use >= 3 [1]: https://www.postgresql.org/docs/13/libpq-status.html#LIBPQ-PQPROTOCOLVERSION