PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres impedisce il timestamp con la conversione del fuso orario

La soluzione proposta è corretta. O più precisamente, è una delle numerose implementazioni corrette. Una delle seguenti opzioni funzionerebbe:

  • Memorizza il timestamp UTC in un campo, memorizza l'offset in un altro.
  • Memorizza il timestamp locale in un campo, memorizza l'offset in un altro.
  • Memorizza la date locale in un campo e memorizzare un time with time zone in un altro. (sebbene time with time zone è generalmente sconsigliato...)
  • Memorizza i timestamp UTC in un campo e il timestamp locale in un altro.

Il più facile in assoluto è il primo, che hai già proposto.

Eviterei di non memorizzare i timestamp in text campi, poiché tendono a non essere ricercabili in modo molto efficiente.

Nota inoltre:se provieni da un background di SQL Server, potresti richiamare il suo datetimeoffset type, che memorizza la data/ora locale e l'offset nel campo e utilizza l'equivalente UTC durante l'indicizzazione. È comune pensare che il timestamp with time zone di Postgres e MySQL avrebbero lo stesso comportamento, ma non lo fanno. Usano semplicemente la sessione fuso orario per la conversione da/verso UTC. SQL Server non ha il concetto di fuso orario della sessione e quindi la discrepanza.

Assicurati di leggere questa parte dei documenti di Postgres .