Дата и время: timestamptz
Момент времени и местное расписание — разные данные. PostgreSQL timestamptz хранит момент, но не исходное название часового пояса.
Плохо
CREATE TABLE meeting (starts_at text);
-- '09.11.2026 10:00' без формата и часового пояса
Хорошо
CREATE TABLE meeting (
starts_at timestamptz NOT NULL,
time_zone text NOT NULL
);
-- '2026-11-09T10:00:00+03:00', 'Europe/Moscow'
Почему это важно
Без зоны одна строка может означать разные моменты. Для будущего повторяющегося расписания нужен местный час и название зоны, а не только одна UTC-метка.
Когда применять
PostgreSQL 18: timestamptz — события и аудит; date — календарная дата; timestamp without time zone вместе с зоной и правилом повтора — локальное расписание. Не добавляйте зону к дате рождения. Денежные типы вынесены в отдельное правило database.money.
Кто что делает
Человек
Определяет, хранится ли точный момент, местная дата или повторяющееся расписание.
AI-агент
Выбирает типы по согласованной семантике, проверяет преобразования зон и неоднозначное местное время.
Как проверить у себя
- Проверены преобразования UTC, разные зоны и переходы летнего времени?
- Различаются дата, момент и повторяющееся расписание?
Первоисточники
История изменений на GitHubДата проверки отражает содержательную сверку. Синхронизация сайта не обновляет её автоматически.