Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле

From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Nikolay Samokhvalov <samokhvalov(at)gmail(dot)com>
Cc: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>, pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле
Date: 2011-03-12 23:11:04
Message-ID: AANLkTinbprK222D24m2ZDwLabzM=rhFdufLA5jtx209j@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

13 марта 2011 г. 2:00 пользователь Nikolay Samokhvalov <
samokhvalov(at)gmail(dot)com> написал:

> 2011/3/13 Dmitry E. Oboukhov <unera(at)debian(dot)org>
>
> Пользователь вводит некие данные.
>>
>> Если он их не вводил, там NULL. Если он вводит эти данные, то они
>> должны быть уникальными между всеми введенными данными.
>>
>> что-то я не пойму как построить ограничение, которое будет отслеживать
>> уникальность только между теми значениями что не NULL.
>>
>> индекс построил
>>
>> CREATE UNIQUE INDEX "tbli" ON "tbl" ("col") WHERE "col" IS NOT NULL;
>>
>> а как построить CONSTRAINT? не хочется RULE приделывать
>>
>>
> UNIQUE INDEX это уже и есть ограничение целостности (constraint).
>
А вот это не так. Ограничение уникальности (UNIQUE CONSTRAINT)
является не индексом, а его зависимостью. Т.е. невозможно удалить
уникальный индекс, порожденный неявно при создании ограничения
уникальности.
Видимо, именно такой объект и хочет создать автор. Однако следует
иметь в виду, что индекс, автоматически создаваемый при создании
ограничения уникальности будет не частичным.

>
> IS NOT NULL можно смело опустить, т.к. проверки на уникальность в
> юник-индексе и так всегда проводятся по NOT NULL значениям.
>

--
// Dmitriy.

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2011-03-12 23:13:25 Re: Частично уникальное поле
Previous Message Dmitriy Igrishin 2011-03-12 23:04:08 Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле