Lists: | Postg토토 커뮤니티SQL : |
---|
From: | "Alexander M(dot) Pravkin" <fduch(at)antar(dot)bryansk(dot)ru> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Косяки с отменой летнего времени |
Date: | 2011-09-08 14:40:45 |
Message-ID: | 20110908144045.GC3409@dyatel.antar.bryansk.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
Обновил сегодня системную zoneinfo (FreeBSD 8.2), привязал к ней же
postgresql (в 8.4.8 ещё не внесли tzdata 2011i).
Напоролся на интересный косяк:
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
From: | Alexey Klyukin <alexk(at)commandprompt(dot)com> |
---|---|
To: | Alexander M(dot) Pravkin <fduch(at)antar(dot)bryansk(dot)ru> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] Косяки с отменой летнего времени |
Date: | 2011-10-03 10:18:20 |
Message-ID: | 336E1118-3DD6-4773-90B4-6A4232D37D17@commandprompt.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
On Sep 8, 2011, at 5:40 PM, Alexander M. Pravkin wrote:
> Обновил сегодня системную zoneinfo (FreeBSD 8.2), привязал к ней же
> postgresql (в 8.4.8 ещё не внесли tzdata 2011i).
На момент вопроса решения я не знал, но в списке изменений 8.4.9 есть упоминание про апдейт информации о часовых поясах, думаю что проблема уже решена.
>
> Напоролся на интересный косяк:
>
> 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
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 |
Lists: | Postg토토 결과SQL : Postg토토 |
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
From: | Timon <timosha(at)gmail(dot)com> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] Косяки с отменой летнего времени |
Date: | 2011-10-05 09:32:45 |
Message-ID: | CAAeC-St3WvNhyW+gZsVEESj7D6+RUhceymcNPBNuttf8q6Bfyg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | Postg토토 커뮤니티SQL : |
5 октября 2011 г. 13:37 пользователь Alexander M. Pravkin
<fduch(at)antar(dot)bryansk(dot)ru> написал:
> 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
в релизнотах как раз написано про обновление временных зон
"Update time zone data files to tzdata release 2011i for DST law
changes in Canada, Egypt, Russia, Samoa, and South Sudan."
+ согласно коммиту
http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=67efa666a5b29ecd19e0f3191a1433fbd5b75b8f
отличается, и эти изменения в 8.4.9 присутсвуют
--
All bugs reserved
From: | "Alexander M(dot) Pravkin" <fduch(at)antar(dot)bryansk(dot)ru> |
---|---|
To: | Timon <timosha(at)gmail(dot)com> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Re: [pgsql-ru-general] Косяки с отменой летнего времени |
Date: | 2011-10-05 10:02:22 |
Message-ID: | 20111005100222.GH81999@dyatel.antar.bryansk.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
On Wed, 2011-10-05 at 15:32 +0600, Timon wrote:
> 5 октября 2011 г. 13:37 пользователь Alexander M. Pravkin
> <fduch(at)antar(dot)bryansk(dot)ru> написал:
> > 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
> в релизнотах как раз написано про обновление временных зон
> "Update time zone data files to tzdata release 2011i for DST law
> changes in Canada, Egypt, Russia, Samoa, and South Sudan."
> + согласно коммиту
> http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=67efa666a5b29ecd19e0f3191a1433fbd5b75b8f
> отличается, и эти изменения в 8.4.9 присутсвуют
Я понимаю, что они присутствуют, но проблема как раз с новыми
таймзонами.
Напоминаю: у PG в timezonesets прописано, что MSK -- это строго +3 без
DST, MSD -- строго +4 с DST, и никак иначе. А в новых tzdata MSK с 2011
года -- это +4 без DST, отсюда и грабли.
--
Alexander M. Pravkin
From: | Vladimir Rusinov <vladimir(at)greenmice(dot)info> |
---|---|
To: | "Alexander M(dot) Pravkin" <fduch(at)antar(dot)bryansk(dot)ru> |
Cc: | Timon <timosha(at)gmail(dot)com>, pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Косяки с отменой летнего времени |
Date: | 2011-10-05 10:24:10 |
Message-ID: | CANjgnBvhOYfN7Pb442KT4Ah5LciNYw81Z8scq3XnR9MxsEsPng@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
2011/10/5 Alexander M. Pravkin <fduch(at)antar(dot)bryansk(dot)ru>
> On Wed, 2011-10-05 at 15:32 +0600, Timon wrote:
> > 5 октября 2011 г. 13:37 пользователь Alexander M. Pravkin
> > <fduch(at)antar(dot)bryansk(dot)ru> написал:
> > > 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
> > в релизнотах как раз написано про обновление временных зон
> > "Update time zone data files to tzdata release 2011i for DST law
> > changes in Canada, Egypt, Russia, Samoa, and South Sudan."
> > + согласно коммиту
> >
> http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=67efa666a5b29ecd19e0f3191a1433fbd5b75b8f
> > отличается, и эти изменения в 8.4.9 присутсвуют
>
> Я понимаю, что они присутствуют, но проблема как раз с новыми
> таймзонами.
>
> Напоминаю: у PG в timezonesets прописано, что MSK -- это строго +3 без
> DST, MSD -- строго +4 с DST, и никак иначе. А в новых tzdata MSK с 2011
> года -- это +4 без DST, отсюда и грабли.
@@ -2042,7<http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/timezone/data/europe;h=221b8504ad1d3abe98233cc76b5a30a5149cfc52#l2042>
+2063,8<http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/timezone/data/europe;h=baed8fe334cbd3f6d53f6a358e4f1b086393544b;hb=67efa666a5b29ecd19e0f3191a1433fbd5b75b8f#l2063>@@
Zone Europe/Moscow 2:30:20 - LMT 1880
2:00 - EET 1930 Jun 21
3:00 Russia MSK/MSD 1991 Mar 31 2:00s
2:00 Russia EE%sT 1992 Jan 19 2:00s
- 3:00 Russia MSK/MSD
+ 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
+ 4:00 - MSK
Если интуиция и здравый смысл меня не обманывают, эта запись означает что до
2011 Mar 27 Europe/Moscow - это MSK/MSD +03, а после - это просто MSK +4.
--
Vladimir Rusinov
http://greenmice.info/
From: | "Alexander M(dot) Pravkin" <fduch(at)antar(dot)bryansk(dot)ru> |
---|---|
To: | Vladimir Rusinov <vladimir(at)greenmice(dot)info> |
Cc: | Timon <timosha(at)gmail(dot)com>, pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Re: [pgsql-ru-general] Косяки с отменой летнего времени |
Date: | 2011-10-05 10:34:52 |
Message-ID: | 20111005103452.GJ81999@dyatel.antar.bryansk.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
On Wed, 2011-10-05 at 14:24 +0400, Vladimir Rusinov wrote:
> > Напоминаю: у PG в timezonesets прописано, что MSK -- это строго +3 без
> > DST, MSD -- строго +4 с DST, и никак иначе. А в новых tzdata MSK с 2011
> > года -- это +4 без DST, отсюда и грабли.
>
>
> @@ -2042,7<http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/timezone/data/europe;h=221b8504ad1d3abe98233cc76b5a30a5149cfc52#l2042>
> +2063,8<http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/timezone/data/europe;h=baed8fe334cbd3f6d53f6a358e4f1b086393544b;hb=67efa666a5b29ecd19e0f3191a1433fbd5b75b8f#l2063>@@
> Zone Europe/Moscow 2:30:20 - LMT 1880
> 2:00 - EET 1930 Jun 21
> 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
> 2:00 Russia EE%sT 1992 Jan 19 2:00s
> - 3:00 Russia MSK/MSD
> + 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
> + 4:00 - MSK
>
> Если интуиция и здравый смысл меня не обманывают, эта запись означает что до
> 2011 Mar 27 Europe/Moscow - это MSK/MSD +03, а после - это просто MSK +4.
Не обманывает. Только PG так не умеет. У него аббревиатура однозначно
определяет смещение и признак DST.
Мне здравый смысл тоже подсказывает, что нельзя было давать одинаковые
аббревиатуры для "до" и "после". Посмотрите zdump -v Europe/Moscow --
при разных смещениях каждый раз аббревиатуры были разные.
--
Alexander M. Pravkin