Как добавить уникальное ограничение в postgres для двух столбцов, где значение одного столбца равно `true` - PullRequest
0 голосов
/ 07 мая 2018

У меня есть таблица, в которой мне нужно уникальное EmpId. Дубликат - это когда несколько записей с одинаковым EmpId, где isDeleted = false

CREATE TABLE someTable (
    id serial primary key,
    EmpId character varying(15) NOT NULL,
    EmpName character varying(15),
    isDeleted boolean,

    unique (EmpId , isDeleted )//where isDeleted is false
)

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Нет такого ограничения, но вы можете создать частичный уникальный индекс (уникальные ограничения реализованы с уникальными индексами под капотом):

CREATE UNIQUE INDEX ON sometable (empid) WHERE NOT isdeleted;

Это будет делать именно то, что вы хотите.

0 голосов
/ 07 мая 2018

Я думаю, для этого вы не можете использовать УНИКАЛЬНОЕ ограничение, но вам нужно создать пользовательскую функцию

CREATE FUNCTION check_empID(varchar, boolean) RETURNS BOOLEAN
AS 
// your implementation

затем используйте его с ограничением CHECK

CREATE TABLE someTable (
    id serial primary key,
    EmpId character varying(15) NOT NULL,
    EmpName character varying(15),
    isDeleted boolean,

    CONSTRAINT ck_active_emp CHECK (check_empID(EmpId, isDeleted))
)

, так как функция будет использовать таблицу, вы можете создать таблицу без ограничений, чтобы вы могли создавать и тестировать свою функцию. затем измените таблицу, чтобы добавить ограничение позже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...