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

Welche Zeitzoneninformationen speichert PostgreSQL?

Beide Annahmen sind falsch:

PostgreSQL speichert einen timestamp with time zone als 8-Byte-Ganzzahl, die den Offset von 2000-01-01 00:00:00 UTC enthält in Mikrosekunden.

Es speichert also weder die Zeitzone, noch ist die Genauigkeit 1 Minute.

Bei der Konvertierung in einen String wird der Zeitstempel entsprechend der aktuellen Einstellung der timezone formatiert Parameter.

Wenn Sie also die Zeitzone separat speichern müssen, müssen Sie sich daran erinnern und den AT TIME ZONE verwenden Ausdruck, um den Zeitstempel in die richtige Zeitzone umzuwandeln.

Sie fragen nach Dokumentationshinweisen. Ein Teil davon ist hier :

/*
 * Timestamp represents absolute time.
[...]
 * Timestamps, as well as the h/m/s fields of intervals, are stored as
 * int64 values with units of microseconds.  (Once upon a time they were
 * double values with units of seconds.)

In derselben Datei finden Sie

/* Julian-date equivalents of Day 0 in Unix and Postgres reckoning */
#define UNIX_EPOCH_JDATE        2440588 /* == date2j(1970, 1, 1) */
#define POSTGRES_EPOCH_JDATE    2451545 /* == date2j(2000, 1, 1) */