Em primeiro lugar, você deve usar
timestamptz em vez de timestamp sempre que trabalhar com vários fusos horários. Evitaria completamente o problema. Detalhes:
Você pode use o
AT TIME ZONE construir como @NuLo sugere
, ele pode mesmo funcionar, mas não exatamente como descrito. AT TIME ZONE converte o tipo timestamp (timestamp without time zone ) para timestamptz (timestamp with time zone ) e vice versa. A representação de texto de um timestamptz o valor depende da configuração atual do fuso horário na sessão em que você executa o comando. Esses dois timestamptz valores são 100% idênticos (indicam o mesmo ponto no tempo):'2015-09-02 15:55:00+02'::timestamptz
'2015-09-02 14:55:00+01'::timestamptz
Mas a representação de texto não . A exibição é para diferentes fusos horários. Se você pegar essa string literal e alimentá-la para um
timestamp tipo, a parte do fuso horário é apenas ignorada e você acaba com diferentes valores. Portanto, se você executar seu COPY declaração em uma sessão com a mesma configuração de fuso horário que seu timestamp original os valores são para, a operação sugerida acontece trabalhar. A maneira limpa, no entanto, é produzir o
timestamp correto valores para começar aplicando AT TIME ZONE duas vezes :SELECT event AT TIME ZONE 'my_target_tz' AT TIME ZONE 'my_source_tz', ...
FROM logtable
ORDER BY event desc; 'my_target_tz' é "seu próprio fuso horário" e 'my_source_tz' o fuso horário do servidor em nuvem no exemplo. Para garantir que o horário de verão seja respeitado, use nomes de fuso horário , não abreviações de fuso horário. A documentação:
Relacionado:
- Contabilizando o horário de verão no Postgres, ao selecionar itens agendados
- Nomes de fuso horário com propriedades idênticas geram resultados diferentes quando aplicados ao carimbo de data/hora
Ou, melhor ainda, use
timestamptz em todos os lugares e funciona corretamente automaticamente.