Dein Lösungsvorschlag ist richtig. Oder genauer gesagt, es ist eine von mehreren korrekten Implementierungen. Eines der folgenden würde funktionieren:
- Speichern Sie den UTC-Zeitstempel in einem Feld, speichern Sie den Offset in einem anderen.
- Speichern Sie den lokalen Zeitstempel in einem Feld speichern Sie den Offset in einem anderen.
- Speichern Sie das lokale
date
in einem Feld und speichern Sie einetime with time zone
in einem anderen. (obwohltime with time zone
wird generell davon abgeraten...) - Speichern Sie die UTC-Zeitstempel in einem Feld und den lokalen Zeitstempel in einem anderen.
Am einfachsten ist bei weitem der erste, den Sie bereits vorgeschlagen haben.
Ich würde vermeiden, Zeitstempel in text
zu speichern Felder, da sie in der Regel nicht sehr effizient durchsuchbar sind.
Beachten Sie auch - wenn Sie von einem SQL Server-Hintergrund kommen, erinnern Sie sich vielleicht an dessen datetimeoffset
Typ, der die lokale Datumszeit und den Offset im Feld speichert und das UTC-Äquivalent während der Indizierung verwendet. Es ist üblich zu glauben, dass der timestamp with time zone
von Postgres und MySQL würden das gleiche Verhalten haben, aber sie tun es nicht. Sie verwenden einfach die Sitzung Zeitzone zum Konvertieren in/von UTC. SQL Server hat kein Konzept einer Sitzungszeitzone und daher die Diskrepanz.
Lesen Sie unbedingt diesen Teil der Postgres-Dokumentation .