PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Retornar uma lista de fusos horários suportados pelo PostgreSQL


Ao trabalhar com o PostgreSQL, você pode ocasionalmente se encontrar na situação em que precisa de uma lista de fusos horários que o Postgres reconhece.

Por exemplo, você pode estar tentando definir o fuso horário para sua sessão atual ou pode estar usando uma das funções de data e hora que permitem manipular o fuso horário.

Abaixo estão duas visualizações e duas funções que retornam uma lista de fusos horários.

A visualização pg_timezone_abbrevs


O pg_timezone_abbrevs view fornece uma lista de abreviações de fuso horário atualmente reconhecidas pelas funções de data e hora.

Veja como são as 10 principais linhas:
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

O is_dst coluna indica se esta é ou não uma abreviatura de horário de verão.

Observe que o conteúdo desta visualização muda quando o timezone_abbreviations parâmetro de tempo de execução é modificado.

Observe também que a documentação do Postgres afirma:

Embora a maioria das abreviações de fuso horário representem deslocamentos fixos do UTC, existem algumas que historicamente variaram em valor (consulte a Seção B.4 para obter mais informações). Nesses casos, essa visão apresenta seu significado atual.

A função pg_timezone_abbrevs()


Você também pode usar o pg_timezone_abbrevs() função para retornar os resultados como um 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)

Você também pode usar a seguinte sintaxe para retornar os resultados em colunas separadas, se necessário.
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

A visualização pg_timezone_names


Os pg_timezone_names view fornece uma lista de nomes de fuso horário que são reconhecidos por SET TIMEZONE , juntamente com suas abreviações associadas, deslocamentos UTC e status de horário de verão.

Veja como são as 10 principais linhas:
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

O is_dst A coluna indica se o fuso horário está ou não observando o horário de verão.

Para esta visualização, a documentação do Postgres afirma:

Ao contrário das abreviações mostradas em pg_timezone_abbrevs , muitos desses nomes implicam um conjunto de regras de data de transição para o horário de verão. Portanto, as informações associadas são alteradas entre os limites do horário de verão local. As informações exibidas são calculadas com base no valor atual de CURRENT_TIMESTAMP .

A função pg_timezone_names()


Você também pode usar o pg_timezone_names() função para retornar os resultados como um 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)

Você também pode usar a seguinte sintaxe para retornar os resultados em colunas 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