Как создать ограничение 'EXCLUDE' или 'Unique' с группой столбцов и предикатом в Postresql? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть таблица:

create table mytable (
   id bigint not null primary key,
   org int,
   post int,
   op int,
   staff boolean
)

и мне нужно создать два ограничения:

  • уникально org и post, если персонал true
  • уникально org, post и op, если персонал неверно

Но UNIQUE в контрапункте нет предиката (пункт where). Я хочу использовать EXCLUDE ограничение, поскольку оно имеет предложение where, но EXCLUDE не поддерживает группу столбцов в одном и том же операторе. I.e:

 constraint stafUnique EXCLUDE ( (org,post) with in) where (staff = true) 

выдает ошибку.

Как это реализовать?

Спасибо.

1 Ответ

3 голосов
/ 09 апреля 2019

Вы можете использовать create unique index вместо ограничения

create unique index ix_staff_true on mytable(org, post) where staff;

create unique index ix_staff_false on mytable(org, post, op) where not staff;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...