2016-04-07 2 views
2

У меня есть таблицаУникальный индекс нуль

CREATE TABLE mandantconfigentity 
(
    id bigint NOT NULL, 
    currentlegalversionnumber integer NOT NULL DEFAULT 5, 
    belongsto_userid character varying(255) 
) 

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

Это не работает:

CREATE UNIQUE INDEX unique_mandantconfig_for_null_belongsto 
    ON mandantconfigentity (1) 
WHERE (belongsto_userid IS NULL); 

ответ

3
CREATE UNIQUE INDEX unique_mandantconfig_for_null_belongsto 
    ON mandantconfigentity ((1)) 
WHERE (belongsto_userid IS NULL); 

Так что он делает - это создает частичный индекс по выражению: что есть явно фиксированное значение 1 для каждой строки, где belongsto_userid IS NULL.

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

Таким образом, для синтаксиса требуются дополнительные скобки.

Ссылки:

+0

работает спасибо за помощь – wutzebaer

0

код для создания индекса необходимо имя столбца:

CREATE UNIQUE INDEX unique_mandantconfig_for_null_belongsto 
    ON mandantconfigentity (id) 
WHERE (belongsto_userid IS NULL); 
+0

Как бы это обеспечить только один ряд в большинстве имеет 'belongsto_userid' равно' NULL'? http://sqlfiddle.com/#!15/3c614/1 – zerkms

+0

это не сработает, это гарантирует, что идентификатор будет только один раз, когда идентификатор пользователя равен нулю – wutzebaer

Смежные вопросы