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

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

13 марта 2011 г. 2:13 пользователь Dmitry E. Oboukhov <unera(at)debian(dot)org>написал:

>
> DI> индекс построил
>
> DI> CREATE UNIQUE INDEX "tbli" ON "tbl" ("col") WHERE "col" IS NOT NULL;
>
> DI> а как построить CONSTRAINT? не хочется RULE приделывать
>
> DI> Чем вышеприведённый индекс не устраивает?
>
> а я попробовал в такую таблицу подобавлять записи с одинаковым 'col' -
> вполне нормально добавляются. хотя в документации написано что
> уникальный индекс контроллирует и вставку данных тоже.
>
Предполагаю, что ситуация подобна следующей:
dmitigr=> create table ttt(nm text);
CREATE TABLE
dmitigr=> create unique index ttt_uidx on ttt(nm) where nm notnull;
CREATE INDEX
dmitigr=> insert into ttt(nm) values('dima');
INSERT 0 1
dmitigr=> insert into ttt(nm) values('Dima');
INSERT 0 1

Если так, то нижеследующая команда может быть прольёт свет:

dmitigr=> create unique index ttt_uidx2 on ttt(lower(nm)) where nm notnull;
ERROR: could not create unique index "ttt_uidx2"
DETAIL: Key (lower(nm))=(dima) is duplicated.

>
> что-то толи я не так делаю, толи не так читаю, спать видимо пора...
> --
>
> . ''`. Dmitry E. Oboukhov
> : :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
> `. `~’ GPGKey: 1024D / F8E26537 2006-11-21
> `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
>

--
// Dmitriy.

In response to

Browse pgsql-ru-general by date

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