Re: UCT (Re: pgsql: Update time zone data files to tzdata release 2019a.)
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Christoph Berg <myon@debian.org>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2019-06-04T16:43:38Z
Lists: pgsql-hackers
Hi,
On 2019-06-04 08:53:30 -0700, Andres Freund wrote:
> If I set the system-wide default, using dpkg-reconfigure -plow tzdata,
> to UTC I *do* get Etc/UTC.
>
> root@alap4:/home/andres/src/postgresql# cat /etc/timezone
> Etc/UTC
> root@alap4:/home/andres/src/postgresql# ls -l /etc/timezone
> -rw-r--r-- 1 root root 8 Jun 4 15:44 /etc/timezone
>
> selecting default timezone ... Etc/UTC
>
> This is independent of being built with system or non-system tzdata.
>
> Enabling debugging shows:
Sorry, I was not awake enough while reading the thread (and UCT looks so
similar to UTC).
I do indeed see the behaviour of choosing UCT in 11, but not in
12. Independent of system/non-system tzdata. With system tzdata, I get
the following debug output (after filtering lots of lines wiht out |grep
-v 'scores 0'|grep -v 'uses leap seconds')
TZ "Zulu" gets max score 5200
TZ "UCT" gets max score 5200
TZ "Universal" gets max score 5200
TZ "UTC" gets max score 5200
TZ "Etc/Zulu" gets max score 5200
TZ "Etc/UCT" gets max score 5200
TZ "Etc/Universal" gets max score 5200
TZ "Etc/UTC" gets max score 5200
TZ "localtime" gets max score 5200
TZ "posix/Zulu" gets max score 5200
TZ "posix/UCT" gets max score 5200
TZ "posix/Universal" gets max score 5200
TZ "posix/UTC" gets max score 5200
TZ "posix/Etc/Zulu" gets max score 5200
TZ "posix/Etc/UCT" gets max score 5200
TZ "posix/Etc/Universal" gets max score 5200
TZ "posix/Etc/UTC" gets max score 5200
ok
whereas master only does:
selecting default timezone ... symbolic link "/etc/localtime" contains "/usr/share/zoneinfo/Etc/UTC"
TZ "Etc/UTC" gets max score 5200
Etc/UTC
The reason for the behaviour difference between v12 and 11 is that 12
does:
/*
* Try to avoid the brute-force search by seeing if we can recognize the
* system's timezone setting directly.
*
* Currently we just check /etc/localtime; there are other conventions for
* this, but that seems to be the only one used on enough platforms to be
* worth troubling over.
*/
if (check_system_link_file("/etc/localtime", &tt, resultbuf))
return resultbuf;
which prevents having to iterate through all of these files, and ending
up with a lot of equivalently scored timezones.
Greetings,
Andres Freund
Commits
-
Tweak our special-case logic for the IANA "Factory" timezone.
- f6c7c64e9fc8 9.6.15 landed
- f227aecb9af7 9.5.19 landed
- e49132e633b5 9.4.24 landed
- d304313b071a 11.5 landed
- d095b2fe676a 12.0 landed
- 8ab66081ca49 13.0 landed
- 55862b2e9303 10.10 landed
-
Avoid choosing "localtime" or "posixrules" as TimeZone during initdb.
- 6c4ffab76320 9.4.24 landed
- 9ef8117420d4 9.5.19 landed
- 51b47471f0f6 9.6.15 landed
- ae9b91be79ea 10.10 landed
- 4459266bf0d3 11.5 landed
- e31dfe99c8c6 12.0 landed
- 3754113f3365 13.0 landed
-
Prefer timezone name "UTC" over alternative spellings.
- e3846a00c2f8 12.0 cited
-
Attempt to identify system timezone by reading /etc/localtime symlink.
- 995b4fe0b14f 11.4 landed
- 8de574aa8bf7 10.9 landed
- 77dc741a1727 9.5.18 landed
- 75b0f21e1b19 9.6.14 landed
- 37011bcb30a9 9.4.23 landed
-
Update time zone data files to tzdata release 2019a.
- f6307bacabf5 11.3 cited