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
datelocale in un campo e memorizzare untime with time zonein 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 .