Я хотел бы добавить ограничение, которое обеспечивает уникальность столбца только в части таблицы.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
WHERE
Часть выше выдавать желаемое за действительное.
Как это сделать? Или мне следует вернуться к доске для рисования отношений?
Ответы:
PostgreSQL не определяет частичное (т.е. условное)
UNIQUE
ограничение, однако вы можете создать частичный уникальный индекс . PostgreSQL использует уникальные индексы для реализации уникальных ограничений, поэтому эффект тот же, вы просто не увидите ограничения, перечисленные вinformation_schema
.См. Частичные индексы .
источник
ERROR: duplicate key value violates unique constraint "stop_myc"
уже было сказано, что PG не определяет частичное (т.е. условное) ограничение UNIQUE. Также в документации говорится, что предпочтительный способ добавления уникального ограничения в таблицу -
ADD CONSTRAINT
Уникальные индексы.Есть способ реализовать это с помощью ограничений исключения (спасибо @dukelion за это решение)
В вашем случае это будет выглядеть так
источник