TGViewer
SQL Ready | Базы Данных SQL Ready | Базы Данных @sql_ready · 17.5K subscribers
Post #1937 3.01K
Диапазоны как тип данных: убираем двойные условия и баги!

Когда работаешь с интервалами, обычно пишут два условия, и почти всегда где-то ошибаются с границами:
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 | #совет
  • 🔥 15
  • 👍 10
  • ❤ 7
  • 🤝 1
More from @sql_ready
  1. Oct 6, 2026Проверяйте связи с учётом периода! В PostgreSQL 18 связь может учитывать ещё и период его…
  2. Oct 6, 2026⚡️5 фундаментальных курсов по ИБ по цене одного Это предложение для тех, кто готов войти в…
  3. Oct 6, 2026👍 Устройство PostgreSQL — подробная документация на русском языке! Материалы посвящены не…
  4. Oct 5, 2026COUNT(*) в PostgreSQL: MVCC, visibility map и стоимость выполнения! В PostgreSQL точный CO…
  5. Oct 5, 2026Как оплачивать зарубежные сервисы в 2026 году? Можно бегать между посредниками и бояться б…
  6. Oct 5, 2026Проверяйте JSON без преобразования! Если JSON приходит как text, необязательно делать ::js…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →