• Tom Lane's avatar
    Remove support for timezone "posixrules" file. · ea57e531
    Tom Lane authored
    The IANA tzcode library has a feature to read a time zone file named
    "posixrules" and apply the daylight-savings transition dates and times
    therein, when it is given a POSIX-style time zone specification that
    lacks an explicit transition rule.  However, there's a problem with
    that code: it doesn't work for dates past the Y2038 time_t rollover.
    (Effectively, all times beyond that point are treated as standard
    time.)  The IANA crew regard this feature as legacy, so their plan is
    to remove it not fix it.  The time frame in which that will happen
    is unclear, but presumably it'll happen well before 2038.
    
    Moreover, effective with the next IANA data update (probably this
    fall), the recommended default will be to not install a "posixrules"
    file in the first place.  The time frame in which tzdata packagers
    might adopt that suggestion is likewise unclear, but at least some
    platforms will probably do it in the next year or so.  While we could
    ignore that recommendation so far as PG-supplied tzdata trees are
    concerned, builds using --with-system-tzdata will be subject to
    whatever the platform's tzdata packager decides to do.
    
    Thus, whether or not we do anything, some increasing fraction of
    Postgres users will be exposed to the behavior observed when there
    is no "posixrules" file; and if we do nothing, we'll have essentially
    no control over the timing of that change.
    
    The best thing to do to ameliorate the uncertainty seems to be to
    proactively remove the posixrules-reading feature.  If we do that in
    a scheduled release then at least we can release-note the behavioral
    change, rather than having users be surprised by it after a routine
    tzdata update.
    
    The change in question is fairly minor anyway: to be affected,
    you have to be using a POSIX-style timezone spec, it has to not
    have an explicit rule, and it has to not be one of the four traditional
    continental-USA zone names (EST5EDT, CST6CDT, MST7MDT, or PST8PDT),
    as those are special-cased.  Since the default "posixrules" file
    provides USA DST rules, the number of people who are likely to find
    such a zone spec useful is probably quite small.  Moreover, the
    fallback behavior with no explicit rule and no "posixrules" file is to
    apply current USA rules, so the only thing that really breaks is the
    DST transitions in years before 2007 (and you get the countervailing
    fix that transitions after 2038 will be applied).
    
    Now, some installations might have replaced the "posixrules" file,
    allowing e.g. EU rules to be applied to a POSIX-style timezone spec.
    That won't work anymore.  But it's not exactly clear why this solution
    would be preferable to using a regular named zone.  In any case, given
    the Y2038 issue, we need to be pushing users to stop depending on this.
    
    Back-patch into v13; it hasn't been released yet, so it seems OK to
    change its behavior.  (Personally I think we ought to back-patch
    further, but I've been outvoted.)
    
    Discussion: https://postgr.es/m/1390.1562258309@sss.pgh.pa.us
    Discussion: https://postgr.es/m/20200621211855.6211-1-eggert@cs.ucla.edu
    ea57e531
datetime.sgml 31.6 KB