PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres evita timestamp com conversão de fuso horário


A solução proposta está correta. Ou mais precisamente, é uma das várias implementações corretas. Qualquer um dos seguintes funcionaria:
  • Armazene o carimbo de data/hora UTC em um campo, armazene o deslocamento em outro.
  • Armazenar o carimbo de data/hora local em um campo, armazene o deslocamento em outro.
  • Armazenar a date local em um campo e armazene um time with time zone noutro. (embora time with time zone geralmente é desencorajado...)
  • Armazene os carimbos de data/hora UTC em um campo e o carimbo de data/hora local em outro.

O mais fácil de longe é o primeiro, que você já propôs.

Eu evitaria armazenar carimbos de data/hora em text campos, pois eles tendem a não ser pesquisáveis ​​com muita eficiência.

Observe também - se você estiver vindo de um segundo plano do SQL Server, poderá recuperar seu datetimeoffset type, que armazena a data e hora local e o deslocamento no campo e usa o equivalente UTC durante a indexação. É comum pensar que o timestamp with time zone do Postgres e do MySQL teriam o mesmo comportamento, mas não. Eles simplesmente usam a sessão fuso horário para converter de/para UTC. SQL Server não tem nenhum conceito de fuso horário de sessão e, portanto, a discrepância.

Certifique-se de ler esta parte dos documentos do Postgres .