May 20th, 2010

харёк

летнее время PostgreSQL на Windows

Дано: PostgreSQL 8.4.4 на Windows 2003 с часовым поясом Азия/Новосибирск.

После перехода на летнее время начал некорректно отрабатывать now(),localtimestamp и иже с ними - показывают на час меньше системного времени, причём в тойже Pg на Linux всё корректно...

В результате ковыряний обнаружилась интересная весч:
Запрос: show timezone
Ответ: Asia/Almaty
Хотя должно быть Asia/Novosibirsk... Как показал гугль, время в Алматы на летнее не переводится...

Лечение - в конфиг postgresql.conf добавляем строчку:
timezone = 'Asia/Novosibirsk'
(!) кавычки обязательны

Upd. Отправил багрепорт разработчикам, тикет №5466
Upd 2. Выяснил причину: December 2009 cumulative time zone update for Microsoft Windows operating systems
Upd 3. Написал патч =) Дифф для файла src/timezone/pgtz.c

892c892
<               "Asia/Almaty"
---
>               "Asia/Novosibirsk"

Upd 4. Патч приняли, в следующем релизе этой проблемы не будет.
Upd 5. Вышла версия 8.4.5 с исправлением.