PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres verhindert Zeitstempel mit Zeitzonenkonvertierung

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 eine time with time zone in einem anderen. (obwohl time 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 .