On Mon, Aug 29, 2016 at 6:37 PM, Robert Haas <robertmh...@gmail.com> wrote:

> On Mon, Aug 29, 2016 at 7:12 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> > Craig Ringer <cr...@2ndquadrant.com> writes:
> >> The same sort of problems apply to network clients, but network
> >> clients don't currently get that option because we only send
> >> server_version on the wire in the startup packet. We don't send
> >> server_version_num.
> >
> >> It'll be immediately useful to have this since clients can test for
> >> it, use it if there, and fall back to their old version parsing code
> >> if there's no server_version_num.
> >
> > I think that this would merely create an attractive nuisance: people
> > would be very likely to omit the "fallback" code and thereby build
> > clients that fail for no very good reason on pre-v10 servers.  As a
> > demonstration that that's not a hypothetical risk, I assert that
> > that's exactly what you propose telling them to do:
> >
> >> Version 10.0 is the perfect time to
> >> do this since many clients will need to update their version handling
> >> anyway, and we can just tell them to use server_version_num now.
>
> You know, I've kind of been on Craig's side of this running dispute up
> until now, but I have to admit that this seems like an awfully good
> argument.  The fact is that nobody's going to be able to rely on
> server_version_num until 9.6 is long gone - which doesn't mean late
> 2021, when official community support will end, but several years
> after that, when most everyone has actually stopped using it.  Of
> course, by that time, assuming we don't backpedal on our decision to
> go with this new versioning scheme, three part version numbers will be
> equally dead and gone, and it's actually a lot easier to extract the
> major version number from the new format than the old.  For example,
> you can just apply atoi() to it:
>
> if (atoi(server_version) < 12)
>     fprintf(stderr, "server is ancient, some features will not work\n");
>
> That wouldn't be nearly good enough with three part version numbers
> because you need the second component, as well.  But all that's going
> away now. If you need a port to some other language:
>
> In Perl, you can test int($server_version).
> In Javascript, you can test parseInt(server_version).
> In Python, it's a bit harder.  But int(re.sub(r'[^\d+]+', '',
> server_version)) seems to work.
>

FWIW, a slightly cleaner but still somewhat meh way would be
int(float(server_version)). No need to mess around with regexps and extra
imports.


Long story short, I kind of agree that it might have been better to
> expose server_version_num rather than server_version in the beginning,
> but I'm not sure that it really helps anybody now, especially given
> our decision to simplify the version number format going forward.
>

Yeah, that's a strong point.

-- 
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/

Reply via email to