sql >> Base de Datos >  >> RDS >> PostgreSQL

Devolver una lista de zonas horarias admitidas por PostgreSQL

Cuando trabaje con PostgreSQL, es posible que ocasionalmente se encuentre en una situación en la que necesite una lista de zonas horarias que reconozca Postgres.

Por ejemplo, podría estar intentando configurar la zona horaria para su sesión actual, o podría estar usando una de las funciones de fecha y hora que le permiten manipular la zona horaria.

A continuación se muestran dos vistas y dos funciones que devuelven una lista de zonas horarias.

La vista pg_timezone_abbrevs

El pg_timezone_abbrevs view proporciona una lista de abreviaturas de zona horaria que actualmente reconocen las funciones de fecha y hora.

Así es como se ven las 10 filas superiores:

SELECT * 
FROM pg_timezone_abbrevs
LIMIT 10;

Resultado:

abbrev  | utc_offset | is_dst
--------+------------+--------
ACDT    | 10:30:00   | t
ACSST   | 10:30:00   | t
ACST    | 09:30:00   | f
ACT     | -05:00:00  | f
ACWST   | 08:45:00   | f
ADT     | -03:00:00  | t
AEDT    | 11:00:00   | t
AESST   | 11:00:00   | t
AEST    | 10:00:00   | f
AFT     | 04:30:00   | f

El is_dst columna indica si se trata o no de una abreviatura de horario de verano.

Tenga en cuenta que el contenido de esta vista cambia cuando timezone_abbreviations se modifica el parámetro de tiempo de ejecución.

También tenga en cuenta que la documentación de Postgres establece:

Si bien la mayoría de las abreviaturas de zonas horarias representan desviaciones fijas de UTC, hay algunas que históricamente han variado en valor (consulte la Sección B.4 para obtener más información). En tales casos, esta vista presenta su significado actual.

Función pg_timezone_abbrevs()

Alternativamente, puede usar el pg_timezone_abbrevs() función para devolver los resultados como un SETOF.

SELECT pg_timezone_abbrevs()
LIMIT 10;

Resultado:

pg_timezone_abbrevs
-------------------
(ACDT,10:30:00,t)
(ACSST,10:30:00,t)
(ACST,09:30:00,f)
(ACT,-05:00:00,f)
(ACWST,08:45:00,f)
(ADT,-03:00:00,t)
(AEDT,11:00:00,t)
(AESST,11:00:00,t)
(AEST,10:00:00,f)
(AFT,04:30:00,f)

También puede usar la siguiente sintaxis para devolver los resultados en columnas separadas si es necesario.

SELECT * 
FROM pg_timezone_abbrevs()
LIMIT 10;

Resultado:

abbrev  | utc_offset | is_dst
--------+------------+--------
ACDT    | 10:30:00   | t
ACSST   | 10:30:00   | t
ACST    | 09:30:00   | f
ACT     | -05:00:00  | f
ACWST   | 08:45:00   | f
ADT     | -03:00:00  | t
AEDT    | 11:00:00   | t
AESST   | 11:00:00   | t
AEST    | 10:00:00   | f
AFT     | 04:30:00   | f

La vista pg_timezone_names

Los pg_timezone_names view proporciona una lista de nombres de zonas horarias que son reconocidos por SET TIMEZONE , junto con sus abreviaturas asociadas, compensaciones UTC y estado de horario de verano.

Así es como se ven las 10 filas superiores:

SELECT * 
FROM pg_timezone_names
LIMIT 10;

Resultado:

       name              | abbrev | utc_offset | is_dst 
------------------+--------+------------+--------
 Indian/Mauritius  | +04    | 04:00:00   | f
 Indian/Chagos     | +06    | 06:00:00   | f
 Indian/Mayotte    | EAT    | 03:00:00    | f
 Indian/Christmas  | +07    | 07:00:00    | f
 Indian/Cocos      | +0630  | 06:30:00    | f
 Indian/Maldives   | +05    | 05:00:00    | f
 Indian/Comoro     | EAT    | 03:00:00    | f
 Indian/Reunion    | +04    | 04:00:00    | f
 Indian/Mahe       | +04    | 04:00:00    | f
 Indian/Kerguelen  | +05    | 05:00:00    | f

El is_dst La columna indica si la zona horaria está observando actualmente el horario de verano.

Para esta vista, la documentación de Postgres establece:

A diferencia de las abreviaturas que se muestran en pg_timezone_abbrevs , muchos de estos nombres implican un conjunto de reglas de fecha de transición de horario de verano. Por lo tanto, la información asociada cambia a través de los límites del horario de verano local. La información mostrada se calcula en función del valor actual de CURRENT_TIMESTAMP .

Función pg_timezone_names()

También puede usar el pg_timezone_names() función para devolver los resultados como un SETOF.

SELECT pg_timezone_names()
LIMIT 10;

Resultado:

pg_timezone_names
---------------------------------
(Indian/Mauritius,+04,04:00:00,f)
(Indian/Chagos,+06,06:00:00,f)
(Indian/Mayotte,EAT,03:00:00,f)
(Indian/Christmas,+07,07:00:00,f)
(Indian/Cocos,+0630,06:30:00,f)
(Indian/Maldives,+05,05:00:00,f)
(Indian/Comoro,EAT,03:00:00,f)
(Indian/Reunion,+04,04:00:00,f)
(Indian/Mahe,+04,04:00:00,f)
(Indian/Kerguelen,+05,05:00:00,f)

También puede usar la siguiente sintaxis para devolver los resultados en columnas separadas.

SELECT * FROM pg_timezone_names()
LIMIT 10;

Resultado:

name              | abbrev | utc_offset | is_dst 
------------------+--------+------------+--------
Indian/Mauritius  | +04    | 04:00:00   | f
Indian/Chagos     | +06    | 06:00:00   | f
Indian/Mayotte    | EAT    | 03:00:00   | f
Indian/Christmas  | +07    | 07:00:00   | f
Indian/Cocos      | +0630  | 06:30:00   | f
Indian/Maldives   | +05    | 05:00:00   | f
Indian/Comoro     | EAT    | 03:00:00   | f
Indian/Reunion    | +04    | 04:00:00   | f
Indian/Mahe       | +04    | 04:00:00   | f
Indian/Kerguelen  | +05    | 05:00:00   | f