PostgreSQL сейчас () и летнее время - PullRequest
0 голосов
/ 21 октября 2018

У нас возникла проблема с переходом на летнее время в PostgreSQL 9.0.10.В попытке использовать структуру файлов часового пояса ОС, мы заменили файлы 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.Но затем мы получаем это:

=> 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 голосов
/ 22 октября 2018

Замена файлов в установке PostgreSQL не является правильным и поддерживаемым способом решения этой проблемы, поэтому неудивительно, что вы получите странные результаты.

Вам следует пересобрать PostgreSQL и настроить его, используя --with-system-tzdata,как указано в документации .

Но, конечно, вы не должны использовать версию 9.0, это не поддерживается уже около 3 лет.

...