Типы данныхСредний
TIMESTAMPTZ
Тип данных для хранения даты и времени с часовым поясом. Рекомендуется вместо TIMESTAMP.
Синтаксис
column TIMESTAMPTZ DEFAULT NOW()
column TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMPОбъяснение
TIMESTAMPTZ хранит момент времени в UTC, при чтении конвертирует в текущий часовой пояс сессии.
TIMESTAMP без TZ — «наивное» время без информации о зоне. Проблема при работе с пользователями в разных TZ.
Правило: всегда используй TIMESTAMPTZ. Исключение — когда важно время «как написано», без привязки к зоне.
Пример
-- Сравнение типов
SELECT
NOW()::TIMESTAMP, -- локальное время без TZ
NOW()::TIMESTAMPTZ, -- UTC + TZ
NOW() AT TIME ZONE 'Europe/Moscow'; -- перевод в московское времяСвязанные термины
Анекдоты по теме
NoSQL говорит SQL: — У тебя жёсткая схема. Чуть что не так — ERROR. А я гибкий. SQL: — А у тебя данные — как в чемодане без органайзера. Найдёшь что-нибудь через год? NoSQL: ...
Разработчик спрашивает: — Как скопировать таблицу? DBA: — CREATE TABLE new_table AS SELECT * FROM old_table; — А со структурой но без данных? DBA: — CREATE TABLE new_table AS SELECT * FROM old_table WHERE 1=0; — Изящно. DBA: — WHERE 1=0 никогда не истина. Ноль строк.
Почему HAVING обижается на WHERE? — Потому что WHERE фильтрует строки ДО группировки, а HAVING — ПОСЛЕ. WHERE думает, что он главный, а HAVING знает: истина где-то в агрегатах.