PostgreSQL now()和夏令时

时间:2018-10-21 13:28:45

标签: postgresql dst

我们在PostgreSQL 9.0.10中存在夏令时问题。为了尝试使用OS时区文件结构,我们用指向OS时区文件的链接替换了PostgreSQL的文件(并重命名了原始文件)

$ ls -l /usr/local/pgsql/share/timezone/Brazil
/usr/local/pgsql/share/timezone/Brazil -> /usr/share/zoneinfo/Brazil/

查询数据库,一切正常:

=> SELECT * FROM pg_timezone_names where name like '%Brazil%';
           name            | abbrev | utc_offset | is_dst
---------------------------+--------+------------+--------
 Brazil.original/DeNoronha | FNT    | -02:00:00  | f
 Brazil.original/East      | BRST   | -02:00:00  | t
 Brazil.original/West      | AMT    | -04:00:00  | f
 Brazil.original/Acre      | AMT    | -04:00:00  | f
 Brazil/DeNoronha          | -02    | -02:00:00  | f
 Brazil/East               | BRT    | -03:00:00  | f
 Brazil/West               | -04    | -04:00:00  | f
 Brazil/Acre               | -05    | -05:00:00  | f

=> show timezone;
  TimeZone
-------------
Brazil/East

如上所示,“巴西/东部”为-03,DST为false。但是然后我们得到了:

=> select now(), now() AT TIME ZONE 'Brazil/East';
              now              |          timezone
-------------------------------+----------------------------
2018-10-21 11:25:51.300744-02 | 2018-10-21 11:25:51.300744

我们希望看到“ 2018-10-21 10:25:51.300744-03”,而不是该日期 “ -02”。

关于我们在这里缺少什么的任何想法?

1 个答案:

答案 0 :(得分:1)

在PostgreSQL安装中替换文件不是解决该问题的正确方法,因此您得到奇怪的结果也就不足为奇了。

您应该按照the documentation所述重建PostgreSQL并使用--with-system-tzdata对其进行配置。

但是您当然不应该使用9.0版,因为该版本已停止使用了大约3年。