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 empg_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 deCURRENT_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