Re: Косяки с отменой летнего времени

From: "Alexander M(dot) Pravkin" <fduch(at)antar(dot)bryansk(dot)ru>
To: Alexey Klyukin <alexk(at)commandprompt(dot)com>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Косяки с отменой летнего времени
Date: 2011-10-05 07:37:21
Message-ID: 20111005073721.GF81999@dyatel.antar.bryansk.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

On Mon, 2011-10-03 at 13:18 +0300, Alexey Klyukin wrote:
> > Обновил сегодня системную zoneinfo (FreeBSD 8.2), привязал к ней же
> > postgresql (в 8.4.8 ещё не внесли tzdata 2011i).
>
> На момент вопроса решения я не знал, но в списке изменений 8.4.9 есть упоминание про апдейт информации о часовых поясах, думаю что проблема уже решена.

Уверен, что нет. tzdata-2011k в плане русских TZ ничем не изменилась, а
в release notes от 4.8.9 нет ничего про таймзоны, кроме того что туда
включили оный 2011k.

Локально это можно пофиксить, пропатчив tzdata.
Вариант 1: с весны 2011 прописать MSD вместо MSK, оставив isdst=1
Вариант 2: прописать какую-то новую аббревиатуру (например, MST), isdst=0,
дописать её в share/postgresql/timezonesets/Europe.txt.

Правильнее второй, но менять надо не только MSK/MSD, но и все остальные
российские зоны.

Чтобы пофиксить глобально -- наверное, надо пинать maintainer'ов tzdata.
Сомневаюсь, что в PG сделают поддержку аббревиатур, меняющихся со
временем.

Ещё мне интересно, как с этим в оракле. Кто-нибудь может проверить?

> > Напоролся на интересный косяк:
> >
> > fduch(at)~=# SHOW timezone;
> > TimeZone
> > ---------------
> > Europe/Moscow
> >
> > fduch(at)~=# SET datestyle TO German ;
> > SET
> > fduch(at)~=# SELECT date_trunc('month', '01.09.2011 00:00:00 MSK'::timestamptz);
> > date_trunc
> > -------------------------
> > 01.09.2011 00:00:00 MSK
> >
> > fduch(at)~=# SELECT date_trunc('month', '01.09.2011 00:00:00 MSK'::timestamptz) = '01.09.2011'::timestamptz;
> > ?column?
> > ----------
> > t
> >
> > fduch(at)~=# SELECT date_trunc('month', '01.09.2011 00:00:00 MSK'::timestamptz) = '01.09.2011 00:00:00 MSK'::timestamptz;
> > ?column?
> > ----------
> > f
> >
> > fduch(at)~=# select
> > extract(epoch from date_trunc('month', '01.09.2011 00:00:00 MSK'::timestamptz)),
> > extract(epoch from '01.09.2011'::timestamptz),
> > extract(epoch from '01.09.2011 00:00:00 MSK'::timestamptz);
> > date_part | date_part | date_part
> > ------------+------------+------------
> > 1314820800 | 1314820800 | 1314824400
> >
> >
> > Всё это связано с тем, что наша нынешняя TZ называется MSK и имеет +0400
> > без DST, а у PG прописано:
> >
> > fduch(at)~=# SELECT * from pg_timezone_abbrevs where abbrev in ('MSK','MSD');
> > abbrev | utc_offset | is_dst
> > --------+------------+--------
> > MSD | 04:00:00 | t
> > MSK | 03:00:00 | f
> >
> > То есть output у него "правильный", а input из расчёта что MSK -- это
> > GMT+3
> >
> > Вопрос вытекает сам собой: и что теперь делать-то? Может, кто-то уже
> > сталкивался?
> >
> >
> > --
> > Alexander M. Pravkin
> >
> > --
> > Sent via pgsql-ru-general mailing list (pgsql-ru-general(at)postgresql(dot)org)
> > To make changes to your subscription:
> > http://www.postgresql.org/mailpref/pgsql-ru-general
>
> /A
>

--
Alexander M. Pravkin

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Timon 2011-10-05 09:32:45 Re: [pgsql-ru-general] Косяки с отменой летнего времени
Previous Message Evgeny M. Baldin 2011-10-05 02:28:07 Re: [pgsql-ru-general] Read only сервера с одного массива данных