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í
date
v jednom poli a uložtetime with time zone
v jiném. (ačkolitime with time zone
se 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 .