TGViewer
Node.js Recipes Node.js Recipes @node_recipes · 3.1K subscribers
Post #558 2.27K
Що таке Exclusion Constraint у Postgresql?
#database

Exclusion Constraint це тип обмеження, який дозволяє вказати, що значення в стовпці або наборі стовпців не повинні перекриватися зі значеннями в іншому стовпці або наборі стовпців. Це корисно для дотримання бізнес-правил або забезпечення цілісності даних.

Наприклад, скажімо, у вас є таблиця, яка представляє календар, і ви хочете переконатися, що дві події не можуть бути заплановані одночасно. Ви можете додати до таблиці обмеження виключення, яке перевіряє час початку та завершення подій на наявність збігів.

CREATE EXTENSION IF NOT EXISTS "btree_gist";
CREATE TABLE calendar (
  id serial primary key,
  user_id integer not null,
  start_time timestamp without time zone,
  end_time timestamp without time zone,
  EXCLUDE USING gist (user_id with =, tsrange(start_time, end_time, '[)') with &&)
);

У цьому прикладі ми використовуємо ключове слово EXCLUDE для створення Exclusion Constraint, яке перевіряє наявність перекриття між стовпцями start_time, end_time та user_id. Вираз USING gist повідомляє PostgreSQL використовувати метод індексу Generalized Search Tree (GiST) для забезпечення обмеження. Для цього нам допоможе btree-gist.

Після створення таблиці ми можемо вставляти в неї рядки, але будь-яка спроба вставити рядок, який порушує обмеження виключення, призведе до помилки. Приклад:

INSERT INTO calendar (user_id, start_time, end_time)
VALUES (1, '2023-01-01 10:00:00', '2023-01-01 11:00:00');
INSERT INTO calendar (user_id, start_time, end_time)
VALUES (1, '2023-01-01 10:30:00', '2023-01-01 11:30:00');

Варто зазначити, що Exclusion Constraint як і всякий сonstraint сповільнює вставку.
  • 👍 33
  • ❤ 4
  • 🤔 2
More from @node_recipes
  1. Jan 5, 2026По всьому світу проходять Cursor Meetups, де локальні спільноти діляться досвідом використ…
  2. Jan 5, 2026Думки на вихідних: Full Stack Learning Подивився останнє відео Сергія Немчинського про фул…
  3. Dec 31, 2025Залишаються лічені години 2025-го. І будьмо чесними: сам перехід на 2026-й нічого автомати…
  4. Dec 25, 2025Моє відкриття 2025 року, як доповідача, це Napkin.ai. На малюнку приклад того, як Napkin г…
  5. Dec 23, 2025А ось й ChatGPT додав 2025 review feature. Авжеж в мене half coded Nest.js app, як ще :)
  6. Dec 23, 2025Моє технічне відкриття 2025 року — centrifugal.dev У 2025-му я багато працював із реальним…
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 →