Los nombres de zona horaria con propiedades idénticas producen resultados diferentes cuando se aplican a la marca de tiempo

Acabo de pasar una hora desesperado con la discrepancia en estos resultados de estas dos expresiones:


db=# SELECT '2012-01-18 1:0 CET'::timestamptz AT TIME ZONE 'UTC'
           ,'2012-01-18 1:0 Europe/Vienna'::timestamptz AT TIME ZONE 'UTC';
      timezone       |      timezone
---------------------+---------------------
 2012-08-18 00:00:00 | 2012-08-17 23:00:00

Obviamente, la segunda expresión deduce dos horas de acuerdo con las reglas de DST, donde la primera solo usa el desplazamiento estándar.

Revisé los catálogos para estos dos nombres de zona horaria. Ambos están ahí y se ven igual.

db=# SELECT * FROM pg_timezone_names WHERE name IN ('CET', 'Europe/Vienna');
     name      | abbrev | utc_offset | is_dst
---------------+--------+------------+--------
 Europe/Vienna | CEST   | 02:00:00   | t
 CET           | CEST   | 02:00:00   | t

Consulté elManual de PostgreSQL sobre zonas horarias.:

PostgreSQL le permite especificar zonas horarias en tres formas diferentes:

Un nombre de zona horaria completa, por ejemplo, America / New_York. Los nombres de zona horaria reconocidos se enumeran en la vista pg_timezone_names (consulte la Sección 45.67). PostgreSQL utiliza los datos de zona horaria de información de zona ampliamente utilizados para este propósito, por lo que muchos otros programas también reconocen los mismos nombres.

Una abreviatura de zona horaria, por ejemplo PST.Dicha especificación simplemente define un desplazamiento particular de UTC, en contraste con los nombres de zonas horarias completas que pueden implicar un conjunto de reglas de fecha de transición de horario de verano también. Las abreviaturas reconocidas se enumeran en la vista pg_timezone_abbrevs (consulte la Sección 45.66). No puede configurar los parámetros de configuración timezone o log_timezone a una abreviatura de zona horaria, pero puede usar abreviaturas en los valores de entrada de fecha / hora y con el operador AT TIME ZONE.

Énfasis en negrita la mia

Entonces, ¿por qué la diferencia?

Mi configuración (más detalles añadidos)

PostgreSQL 9.1.4 en Debian Squeeze (squeeze-backports estándar dehttp://backports.debian.org/debian-backports)

Localtimezone configuración predeterminada de la configuración regional del sistemade_AT.UTF-8, pero debe ser irrelevante para el ejemplo.

SELECT version();
                                                version
-------------------------------------------------------------------------------------------------------
 PostgreSQL 9.1.4 on x86_64-unknown-linux-gnu, compiled by gcc-4.4.real (Debian 4.4.5-8) 4.4.5, 64-bit

SHOW timezone_abbreviations;

 timezone_abbreviations
------------------------
 Default

.. que (supongo) carga abreviaturas de este archivo: /usr/share/postgresql/9.1/timezonesets/Default

Estoy en una pérdida donde el nombre de la zona horariaCET viene de. Pero obviamente está ahí en mis instalaciones. UNAprueba rápida en sqlfiddle Muestra el mismo resultado.

Probé en dos servidores diferentes con una configuración similar. También con PostgreSQL 8.4. Se encontró 'CET' como zona horarianombre enpg_timezone_names en todos ellos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta