URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 81116
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Отмена перехода на зимнее время в P..."

Отправлено auto_tips , 01-Ноя-11 14:54 
В PostgreSQL используется своя внутренняя таблица временных зон (postgresql-x.x.x/src/timezone), поэтому обновление системной базы zoneinfo не повлияет на перевод часов в PostgreSQL.

Смотрим текущее состояние:

   SELECT * FROM pg_timezone_names;

   Europe/Moscow                    | MSK    | 03:00:00   | f

Как видим часы перевелись и используется смещение +3 вместо +4.

   SELECT now();
   2011-11-01 11:00:19.834213+03

   SELECT now()-'6 days'::interval;
   2011-10-26 11:00:52.155833+04

Копируем актуальные данные из обновлённой в системе базы часовых поясов. База часовых поясов в PostgreSQL может оказаться в /usr/local/share/pgsql/timezone, /usr/share/pgsql/timezone или /usr/local/pgsql/share/timezone/. Например:

   cp -f /usr/share/zoneinfo/Europe/Moscow /usr/share/pgsql/timezone/Europe/Moscow

После этого "SELECT * FROM pg_timezone_names" отобразит изменения, но чтобы они подействовали обязательно требуется перезапустить PostgreSQL.

Для изменения часового пояса для конкретной БД можно использовать конструкцию:

   ALTER DATABASE mydb SET timezone TO 'Asia/Yekaterinburg';

Из других подводных камней, которые обнаружились при отмене перехода на зимнее время можно упомянуть забытое обновление /etc/localtime в chroot-окружениях.


URL:
Обсуждается: https://www.opennet.ru/tips/info/2639.shtml


Содержание

Сообщения в этом обсуждении
"Отмена перехода на зимнее время в PostgreSQL"
Отправлено Vadim , 01-Ноя-11 14:54 
>ALTER DATABASE mydb SET timezone TO >'Asia/Yekaterinburg';

Это несколько хард коддинг.

psql можно указать смещение временной зоны относителельно UTC:

SET TIMEZONE TO "+4";


"Отмена перехода на зимнее время в PostgreSQL"
Отправлено qwerty , 01-Ноя-11 15:07 
По-моему, это у тебя хардкодинг. :)
А в статье нормальное решение.

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено anonymous , 01-Ноя-11 17:03 
а через полгода опять назад?

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено qwerty , 01-Ноя-11 17:20 
Почему? Через полгода в Екатеринбурге что-то опять изменится?

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено anonymous , 02-Ноя-11 10:25 
неделю назад по Asia/Yekaterinburg было летнее время, а через полгода не будет?

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено Аноним , 01-Ноя-11 21:42 
> psql можно указать смещение временной зоны относителельно UTC:
> SET TIMEZONE TO "+4";

Ага и потерять все переключения часовых поясов в прошлом.


"Отмена перехода на зимнее время в PostgreSQL"
Отправлено anonymous , 01-Ноя-11 20:22 
Странно,
SELECT * FROM pg_timezone_names;
Europe/Moscow             | MSK    | 04:00:00   | f
Это значит час. пояс правильный стоит?
# uname -a
Linux postgres 2.6.38-gentoo-r6 #3 SMP Tue Jun 7 22:35:12 YEKST 2011 x86_64 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz GenuineIntel GNU/Linux
# postgres=# select version();
PostgreSQL 8.4.7 on x86_64-pc-linux-gnu, compiled by GCC x86_64-pc-linux-gnu-gcc (Gentoo 4.4.5 p1.2, pie-0.4.5) 4.4.5, 64-bit
(сие под 1с-ку заточено)
Хотя кажется, что правильность часового пояса на данные не влияет

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено Turbid , 02-Ноя-11 12:06 
Europe/Moscow                          | MSK    | 04:00:00   | f

Debian testing

ЧЯДНТ?


"Отмена перехода на зимнее время в PostgreSQL"
Отправлено funny_falcon , 04-Ноя-11 21:52 
Сидишь на testing.
В stable всё намного хуже

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено funny_falcon , 04-Ноя-11 21:56 
> Сидишь на testing.
> В stable всё намного хуже

Поправка: чтобы понять всю досадную не справедливость жизни, выполни:

    select '2011-11-04 00:00:00 MSK'::timestamptz


"Отмена перехода на зимнее время в PostgreSQL"
Отправлено Andrej , 07-Ноя-11 00:39 
так что не так в статье?
или в у меня в postgresql?

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено qwerty , 08-Ноя-11 11:41 
2011-11-04 01:00:00+04

Сколько должно быть ?


"Отмена перехода на зимнее время в PostgreSQL"
Отправлено funny_falcon , 24-Ноя-11 19:53 
2011-11-04 00:00:00+04

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено BbIPb , 08-Ноя-11 11:31 
у меня тоже чтото в postgresql не так ?
смена ТЗ в системе, вызвала смену в PG

postgres=# SELECT * FROM pg_timezone_names where name like '%Moscow%';
     name      | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
Europe/Moscow | MSK    | 04:00:00   | f
(1 row)

postgres=# select version();
                                                    version                                                    
---------------------------------------------------------------------------------------------------------------
PostgreSQL 9.1.0 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
(1 row)


"Отмена перехода на зимнее время в PostgreSQL"
Отправлено mike_t , 08-Ноя-11 13:56 
небольшое уточнение, этот совет полезен только тем у кого собран pgsql без опции --with-system-tzdata=DIR
если опция присутствует, то и так всё поправится

"Отмена перехода на зимнее время в PostgreSQL"
Отправлено Stas Todorov , 25-Ноя-11 22:05 
Автору огромное спасибо!
Хотелось бы только отметить, что копировать файлы зон приходится от рута, и (в случае с сервером 1С) лучше для большей безопасности сначала остановить сервис 1С, потом postgresql, и потом уже скопировать правильный файл и запустить сервисы в обратной последовательности.