Vos deux hypothèses sont fausses :
PostgreSQL stocke un timestamp with time zone
sous la forme d'un entier de 8 octets contenant le décalage de 2000-01-01 00:00:00 UTC
en microsecondes.
Ainsi, il ne stocke ni le fuseau horaire, ni la précision 1 minute.
Lors de la conversion en chaîne, l'horodatage est formaté en fonction du paramètre actuel du timezone
paramètre.
Donc, si vous devez stocker le fuseau horaire séparément si vous devez vous en souvenir et utiliser le AT TIME ZONE
expression pour convertir l'horodatage dans le fuseau horaire approprié.
Vous demandez des références de documentation. Une partie de cela est ici :
/*
* 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.)
Dans le même fichier, vous trouvez
/* 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) */