Вы поймете лучше, если посмотрите, как PostgreSQL отображает две метки времени:
SELECT TIMESTAMP WITH TIME ZONE '2019-12-01 13:37:12 PST';
timestamptz
------------------------
2019-12-01 22:37:12+01
(1 row)
SELECT TIMESTAMP WITH TIME ZONE '2019-12-01 13:37:12 EST';
timestamptz
------------------------
2019-12-01 19:37:12+01
(1 row)
В обоих случаях метка времени преобразуется в часовой пояс сеанса, как указано в конфигурации timezone
параметр.
PostgreSQL не хранит информацию о часовом поясе в timestamp with time zone
, он преобразует метку времени в UTC и сохраняет ее таким образом.При отображении метка времени преобразуется в текущий часовой пояс сеанса.
Так что timestamp with time zone
лучше называть «абсолютной меткой времени» в PostgreSQL.Он точно представляет определенный момент времени, но без информации о часовом поясе.
Другими словами, если вы извлечете timezone_hour
, вы всегда получите один и тот же результат: смещение часового пояса вашего текущего часового пояса сеанса..