sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres evita la marca de tiempo con la conversión de zona horaria

Su solución propuesta es correcta. O más precisamente, es una de varias implementaciones correctas. Cualquiera de los siguientes funcionaría:

  • Almacene la marca de tiempo UTC en un campo, almacene la compensación en otro.
  • Almacenar la marca de tiempo local en un campo, almacene el desplazamiento en otro.
  • Almacenar la date local en un campo y almacenar una time with time zone en otro. (aunque time with time zone generalmente se desaconseja...)
  • Almacene las marcas de tiempo UTC en un campo y la marca de tiempo local en otro.

El más fácil con diferencia es el primero, que ya propusiste.

Evitaría almacenar marcas de tiempo en text campos, ya que tienden a no ser muy eficientes en la búsqueda.

También tenga en cuenta:si proviene de un entorno de SQL Server, puede recordar su datetimeoffset type, que almacena la fecha y hora local y el desplazamiento en el campo, y usa el equivalente UTC durante la indexación. Es común pensar que la timestamp with time zone de Postgres y MySQL tendrían el mismo comportamiento, pero no lo tienen. Simplemente usan la sesión zona horaria para convertir a/desde UTC. SQL Server no tiene concepto de una zona horaria de sesión y, por lo tanto, la discrepancia.

Asegúrese de leer esta parte de los documentos de Postgres .