Este é apenas um mal-entendido decorrente do nome do tipo um tanto enganoso. O próprio fuso horário não é armazenado . Ele apenas atua como deslocamento para calcular um carimbo de data/hora UTC (entrada), que é realmente armazenado. Ou como decorador na exibição de um timestamp de acordo com o fuso horário atual ou determinado (saída). Isso é tudo de acordo com o padrão SQL.
Apenas o ponto no tempo é armazenado, nenhuma informação de zona. É por isso que 64 bits de informação são suficientes. O carimbo de data/hora é exibido para o cliente de acordo com a configuração de fuso horário atual da sessão.
Detalhes:
- Ignorando completamente os fusos horários no Rails e no PostgreSQL
Além disso, como Jon mencionou,
time with time zone
é definido no padrão SQL e, portanto, implementado no Postgres, mas seu uso é desencorajado:
time with time zone
é definido pelo padrão SQL, mas a definição exibe propriedades que levam a uma utilidade questionável.
É um tipo inerentemente ambíguo que não pode lidar com o horário de verão corretamente.