proudmore
@proudmore

Как создать уникальный индекс с условием?

id | contractor_id | is_main (bool)
-------------------------------------------------------
1  | 1             | true 
2  | 2             | true
3  | 1             | true

Как создать уникальный индекс, который будет гарантировать, что единовременно в таблице может быть только 1 contractor_id, где is_main = true?

Т.е. чтобы при добавлении строки 3 было выброшено исключение?

UPD. Интересует именно индекс, если нет возможности создать индекс, то сообщите об этом, пожалуйста
  • Вопрос задан
  • 234 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Прямо-таки буквально так и делается

create unique index on tablename (contractor_id) where is_main;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dzhebrak
Можно сделать индекс сразу по двум столбцам:
CREATE TABLE example (
    id SERIAL PRIMARY KEY,
    contractor_id INT NOT NULL,
    is_main BOOLEAN NOT NULL,
    UNIQUE (contractor_id, is_main)
);

https://www.postgresqltutorial.com/postgresql-uniq...
или
CREATE UNIQUE INDEX CONCURRENTLY contractor_id_main ON table_name (contractor_id, is_main);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы