PostgreSQL TIMESTAMPTZ
O `TIMESTAMPTZ` do PostgreSQL é um tipo de dados que armazena data e hora com informações de fuso horário. Ele é essencial para aplicativos que requerem uma marcação precisa da hora em diferentes fusos horários.
Uso
O tipo `TIMESTAMPTZ` é usado para armazenar dados de carimbo de data/hora que levam em conta as diferenças de fuso horário, garantindo a consistência em aplicativos sensíveis ao tempo. Ele é frequentemente utilizado em cenários que envolvem transações de dados globais e eventos de registro. Internamente, o `TIMESTAMPTZ` armazena todos os carimbos de data e hora em UTC e os converte de acordo com a configuração de fuso horário do cliente na recuperação, garantindo a consistência em diferentes regiões.
sql
CREATE TABLE event_logs (
event_id SERIAL PRIMARY KEY,
event_name VARCHAR(255),
event_timestamp TIMESTAMPTZ
);
Nessa sintaxe, `event_timestamp TIMESTAMPTZ` armazena a hora exata do evento, incluindo o fuso horário.
Exemplos
1. Inserção básica de TIMESTAMPTZ
sql
INSERT INTO event_logs (event_name, event_timestamp)
VALUES ('System Update', '2023-10-25 14:30:00+00');
Este exemplo insere um evento com um registro de data e hora específico em UTC, incluindo informações de fuso horário UTC.
2. Recuperação do TIMESTAMPTZ atual
sql
SELECT NOW()::TIMESTAMPTZ AS current_time;
Aqui, a função `NOW()` obtém a data e a hora atuais, ajustadas automaticamente ao fuso horário do servidor, e as converte em `TIMESTAMPTZ`.
3. Conversão de TIMESTAMPTZ para outro fuso horário
sql
SELECT event_name,
event_timestamp AT TIME ZONE 'America/New_York' AS event_time_est
FROM event_logs;
Esse exemplo converte o `TIMESTAMPTZ` armazenado em Eastern Standard Time (EST) para fins de exibição e não altera o carimbo de data/hora armazenado.
Dicas e práticas recomendadas
- Use o TIMESTAMPTZ para aplicativos globais. Ele garante a consistência do tempo em diferentes regiões.
- Tenha em mente as conversões de fuso horário. Sempre especifique o fuso horário ao converter ou comparar registros de data e hora.
- Aproveite as funções incorporadas. Use as funções do PostgreSQL, como `NOW()` ou `CURRENT_TIMESTAMP`, para obter um registro de data e hora dinâmico.
- Tenha em mente a eficiência do armazenamento. Embora o `TIMESTAMPTZ` seja eficiente, garanta sua necessidade, pois ele pode consumir mais armazenamento do que o `TIMESTAMP` sem um fuso horário. Considere o uso de `TIMESTAMP` sem fuso horário para aplicativos localizados em que os fusos horários não são uma preocupação.
- Defina corretamente o parâmetro de configuração `timezone` do servidor PostgreSQL. Isso garante o comportamento esperado das conversões de fuso horário e a recuperação precisa da hora.
- Considere as mudanças no horário de verão (DST). O `TIMESTAMPTZ` se ajusta automaticamente ao horário de verão, o que é fundamental para aplicativos sensíveis a mudanças de horário. Verifique se as configurações de fuso horário do servidor tratam o horário de verão adequadamente.