Уникальное ограничение для комбинации значений в Postgresql - PullRequest
1 голос
/ 04 мая 2020

возможно ли создать уникальное ограничение в Postgresql, которое будет учитывать значения столбцов и работать с одним значением, но не с другим?

У меня есть таблица, в которой элементы имеют «код», который должен быть уникальным, но записи не удаляются из таблицы, просто помечаются как удаленные (специальное логическое поле «удалено»). Я мог бы создать unique(code, deleted) для обеспечения уникальности, это работает, если я не помечаю 2 строки как удаленные одним и тем же «кодом». Если я попытаюсь «удалить» вторую строку, она предупредит, что 2 строки будут иметь одинаковые уникальные значения и не разрешит. То, что я хотел бы иметь, это проверить уникальное поле «код» для каждой строки, что «удалено» является ложным.

1 Ответ

2 голосов
/ 04 мая 2020

Вы не можете сделать это с ограничением. Однако в Postgres частичный уникальный индекс будет выполнять именно то, что вы хотите:

create unique index myindex on mytable(code) where (deleted = false);

Вы также можете сформулировать это как:

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