Загружаем изображение…

Диапазоны как тип данных: убираем двойные условия и баги!



Когда работаешь с интервалами, обычно пишут два условия, и почти всегда где-то ошибаются с границами:
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 | #совет
Просмотры: 439
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти