Vámi navrhované řešení je správné. Přesněji řečeno, je to jedna z několika správných implementací. Fungovalo by kterékoli z následujících:
- Uložte časové razítko UTC do jednoho pole, uložte posun do jiného.
- Uložte místní časové razítko v jednom poli uložte posun do jiného.
- Uložte místní
datev jednom poli a uložtetime with time zonev jiném. (ačkolitime with time zonese obecně nedoporučuje...) - Uložte časová razítka UTC do jednoho pole a místní časové razítko do druhého.
Zdaleka nejjednodušší je ten první, který jste již navrhli.
Vyhnul bych se ukládání časových razítek v text pole, protože nebývají moc efektivně prohledávatelná.
Také si všimněte – pokud přicházíte z prostředí SQL Server, můžete si vzpomenout na jeho datetimeoffset typ, který ukládá místní datum a čas a offset v poli a používá ekvivalent UTC během indexování. Je běžné si myslet, že Postgres a MySQL timestamp with time zone budou mít stejné chování, ale nemají. Jednoduše použijí relaci časové pásmo pro převod do/z UTC. SQL Server nemá žádnou koncepci časového pásma relace, a tedy nesrovnalosti.
Nezapomeňte si přečíst tuto část dokumentů Postgres .