Диапазоны как тип данных: убираем двойные условия и баги! — 29 апреля 2026 г. в 18:22:38.440
Диапазоны как тип данных: убираем двойные условия и баги! Когда работаешь с интервалами, обычно пишут два условия, и почти всегда где-то ошибаются с границами: WHERE created_at <= now() AND shipped_at > now() Такой код легко сломать и плохо масштабируется: tstzrange(created_at, shipped_at) PostgreSQL имеет встроенные range-типы, которые позволяют хранить и сравнивать интервалы как единое значение. tstzrange — для timestamptz, tsrange — для timestamp: @> now() Оператор @> проверяет содержит ли диапазон значение, заменяя сразу два условия. По умолчанию границы [ ) — аналог created_at <= x AND shipped_at > x: CREATE INDEX ON orders USING GIST (tstzrange(created_at, shipped_at)); С GiST-индексом такие запросы работают эффективно даже на больших объёмах. range-типы — это способ убрать класс ошибок с датами и упростить сложную логику. SQL Ready | #совет

