Como as abreviaturas de zona horária não são bem padronizadas, o PostgreSQL oferece uma maneira de personalizar o conjunto de abreviatura aceitas na entrada de data e hora. Existem duas fontes para estas abreviaturas:
O parâmetro de tempo de execução TimeZone
é geralmente definido com o nome de uma entrada no banco de dados
de zonas horárias da
IANA.
Se esta zona horária tiver abreviaturas amplamente utilizadas,
elas aparecerão nos dados da IANA e o
PostgreSQL reconhecerá preferencialmente
estas abreviaturas com os significados fornecidos nos dados da
IANA.
Por exemple, se timezone estiver definido como
America/New_York então EST
será entendido como UTC-5 e EDT
será entendido como UTC-4.
(Estas abreviaturas da IANA também serão usadas
na saída de data e hora, se DateStyle
estiver definido para um estilo que prefira abreviaturas de
zona horária não numéricas.)
Se a abreviatura não for encontrada na zona horária
da IANA corrente, ela será procurada na lista
especificada pelo parâmetro de tempo de execução
timezone_abbreviations.
A lista timezone_abbreviations é útil
principalmente para permitir que a entrada de data e hora
reconheça abreviaturas de zonas horárias diferentes da
zona horário corrente.
(Estas abreviaturas não serão usadas na saída de data e hora.)
Embora o parâmetro timezone_abbreviations possa
ser alterado por qualquer usuário do banco de dados, os valores
possíveis para ele estão sob o controle do administrador do
banco de dados — são, na verdade, nomes de arquivos de
configuração armazenados na pasta
.../share/timezonesets/
do diretório de instalação
[192].
Ao adicionar ou alterar arquivos neste diretório, o administrador
pode definir uma política local para abreviaturas de zona horária.
O parâmetro timezone_abbreviations pode ser
definido igual a qualquer nome de arquivo encontrado no diretório
.../share/timezonesets/, se o nome do arquivo
for inteiramente alfabético.
(A proibição de caracteres não alfabéticos no parâmetro
timezone_abbreviations impede a leitura de
arquivos fora do diretório pretendido, bem como a leitura de
arquivos de segurança do editor e outros arquivos com nomes estranhos.)
Um arquivo de abreviaturas de zona horária pode conter linhas em
branco e comentários começando com #.
As linhas que não são de comentário devem ter um desses formatos:
abreviatura_da_zona_horáriadeslocamentoabreviatura_da_zona_horáriadeslocamentoDabreviatura_da_zona_horárianome_da_zona_horária@INCLUDEnome_do_arquivo@OVERRIDE
abreviatura_da_zona_horária é apenas a
abreviatura que está sendo definida;
deslocamento é um número inteiro indicando
o deslocamento equivalente em segundos do UTC, sendo positivo a
leste de Greenwich, e negativo a oeste.
Por exemplo, -18000 seria cinco horas a oeste de Greenwich,
ou horário padrão da costa leste dos EUA;
D indica que o nome da zona horária representa
o horário de verão local em vez do horário padrão.
Como alternativa, pode ser fornecido um valor de
nome_da_zona_horária se referindo a um
nome de zona horária definido no
banco de dados de zona horária da IANA.
A definição da zona horária é consultada para ver se a abreviatura
está, ou esteve, em uso naquela zona e, em caso afirmativo, o
significado apropriado é usado — ou seja, o significado que
estava em uso no carimbo de tempo cujo valor está sendo determinado,
ou o significado em uso imediatamente anterior a ele, se não era o
corrente naquele momento, ou o significado mais antigo,
se foi usado somente após aquele momento.
Este comportamento é essencial para lidar com abreviaturas cujo
significado variou historicamente.
Também é permitido definir uma abreviatura em termos de um nome de
zona horária em que esta abreviatura não apareça; então, usar a
abreviatura equivale a escrever o nome da zona horária.
É preferível usar um deslocamento inteiro
puro ao definir uma abreviatura cujo deslocamento do UTC nunca
mudou, porque estas abreviaturas são muito mais econômicas de processar
do que aquelas que exigem consultar uma definição de zona horária.
A sintaxe @INCLUDE permite a inclusão de outro
arquivo do diretório .../share/timezonesets/.
A inclusão pode ser aninhada, a uma profundidade limitada.
A sintaxe @OVERRIDE indica que as entradas
subsequentes no arquivo podem substituir as entradas anteriores
(normalmente, entradas obtidas de arquivos incluídos).
Sem isto, definições conflitantes da mesma abreviatura de zona
horária são consideradas um erro.
Em uma instalação não modificada, o arquivo Default
contém todas as abreviaturas de zona horária não conflitantes para
a maior parte do mundo.
Os arquivos adicionais Australia e
India são fornecidos para estas regiões:
estes arquivos primeiro incluem o arquivo Default
e, em seguida, adicionam ou modificam as abreviaturas conforme necessário.
Para fins de referência, uma instalação padrão também contém os
arquivos Africa.txt,
America.txt, etc., contendo informações sobre
todas as abreviaturas de zona horária conhecidas por serem usadas
em conformidade com o banco de dados de zona horária da IANA.
As definições de nome de zona horária encontradas nesses arquivos
podem ser copiadas e coladas em um arquivo de configuração
personalizado, conforme seja necessário.
Note que estes arquivos não podem ser referenciados diretamente
como definições de timezone_abbreviations,
devido ao ponto existente em seus nomes.
Se ocorrer um erro durante a leitura do conjunto de abreviaturas de zona horária, nenhum novo valor será aplicado, e o conjunto antigo será mantido. Se o erro ocorrer durante a ativação do banco de dados, a ativação irá falhar.
As abreviaturas de zona horária definidas no arquivo de configuração
substituem significados não relacionados a zona horária
incorporados ao PostgreSQL.
Por exemplo, o arquivo de configuração Australia
define SAT
(como South Australian Standard Time).
Quando este arquivo está ativo, SAT não é
reconhecido como abreviatura de Saturday.
Se você modificar arquivos no diretório
.../share/timezonesets/, caberá a você fazer
as cópias de segurança — uma exportação
(dump)
normal do banco de dados não inclui este diretório.