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 untime with time zone
in un altro. (sebbenetime 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 .