Eu tenho uma coluna chamada inserted_at
em meu banco de dados postgres(v15.3) que é do tipo TIMESTAMPTZ
. Este valor quando inserido será sempre passado em UTC
Quero recuperar todos os registros desses, 30 dias se passaram desde o último arquivo inserted_at
. Posso comparar a data e hora atuais (em UTC) com inserted_at
o valor.
Como posso fazer isso?
Para facilitar uma varredura de índice na coluna, use
A descrição da tarefa é o maior enigma aqui:
Supondo que você queira todas as linhas com carimbo de data/hora anterior a 30 dias, basta:
O tipo
timestamptz
( =timestamp with time zone
) armazena pontos únicos no tempo. Não há necessidade de traduzir para a hora local. Basta comparar com o carimbo de data/hora atual (também digitetimestamptz
!) Menos 30 dias. Ver:Certifique-se de que a expressão seja "sargável". Ou seja, não envolva a coluna da tabela em uma expressão que desabilitaria o suporte ao índice. Neste caso: subtraia 30 dias da entrada constante, não adicione 30 dias ao valor da coluna.
Para ser claro, esta informação é completamente irrelevante para type
timestamptz
:Para
timestamptz
, qualquer entrada é "normalizada" para UTC internamente, o formato de entrada ou o deslocamento de fuso horário anexado não são armazenados.timestamptz
normalmente é a melhor escolha. Novamente, supondo que você não confundiutimestamptz
etimestamp
e não bagunçou a entrada de dados.