Ambas as suas suposições estão erradas:
PostgreSQL armazena um
timestamp with time zone
como inteiro de 8 bytes que contém o deslocamento de 2000-01-01 00:00:00 UTC
em microssegundos. Portanto, ele não armazena o fuso horário, nem a precisão de 1 minuto.
Após a conversão para uma string, o timestamp é formatado de acordo com a configuração atual do
timezone
parâmetro. Então, se você tiver que armazenar o fuso horário separadamente, se precisar se lembrar dele, use o
AT TIME ZONE
expressão para converter o carimbo de data/hora para o fuso horário adequado. Você pede referências de documentação. Parte disso é aqui :
/*
* 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.)
No mesmo arquivo, você encontra
/* 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) */