Sample Header Ad - 728x90

"AT TIME ZONE" with zone name PostgreSQL bug?

13 votes
3 answers
7002 views
I was answering this stackoverflow question and found strange result: select * from pg_timezone_names where name = 'Europe/Berlin' ; name | abbrev | utc_offset | is_dst ---------------+--------+------------+-------- Europe/Berlin | CET | 01:00:00 | f and next query select id, timestampwithtimezone, timestampwithtimezone at time zone 'Europe/Berlin' as berlin, timestampwithtimezone at time zone 'CET' as cet from data ; id | timestampwithtimezone | berlin | cet -----+------------------------+---------------------+--------------------- 205 | 2012-10-28 01:30:00+02 | 2012-10-28 01:30:00 | 2012-10-28 00:30:00 204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00 203 | 2012-10-28 02:30:00+02 | 2012-10-28 02:30:00 | 2012-10-28 01:30:00 202 | 2012-10-28 02:59:59+02 | 2012-10-28 02:59:59 | 2012-10-28 01:59:59 106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00 I'm using PostgreSQL 9.1.2 and ubuntu 12.04. Just checked that on 8.2.11 result is the same. According to documentation it doesn't matter if I use name or abbreviation. Is this a bug? Am I doing something wrong? Can someone explain this result? **EDIT** For the comment that CET is not Europe/Berlin. I'm just selecting values from pg_timezone_names. select * from pg_timezone_names where abbrev ='CEST'; name | abbrev | utc_offset | is_dst ------+--------+------------+-------- and select * from pg_timezone_names where abbrev ='CET'; name | abbrev | utc_offset | is_dst ---------------------+--------+------------+-------- Africa/Tunis | CET | 01:00:00 | f Africa/Algiers | CET | 01:00:00 | f Africa/Ceuta | CET | 01:00:00 | f CET | CET | 01:00:00 | f Atlantic/Jan_Mayen | CET | 01:00:00 | f Arctic/Longyearbyen | CET | 01:00:00 | f Poland | CET | 01:00:00 | f ..... During winter Europe/Berlin is +01. During summer it is +02. **EDIT2** In 2012-10-28 timezone has change from summer time to winter time at 2:00. This two records have the same value in Europe/Berlin: 204 | 2012-10-28 02:00:00+02 | 2012-10-28 02:00:00 | 2012-10-28 01:00:00 106 | 2012-10-28 02:00:00+01 | 2012-10-28 02:00:00 | 2012-10-28 02:00:00 This suggest that if I use one of abbreviations (CET or CEST) for big data range (summer time and winter time) result will be wrong for some of records. Will be good if I use 'Europe/Berlin'. I changed the system time to '2012-01-17' and pg_timezone_names has changed also. select * from pg_timezone_names where name ='Europe/Berlin'; name | abbrev | utc_offset | is_dst ---------------+--------+------------+-------- Europe/Berlin | CEST | 02:00:00 | t
Asked by sufleR (678 rep)
Dec 19, 2012, 11:50 PM
Last activity: Nov 20, 2024, 10:18 AM