Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уникальность одного значения в поле / 9 сообщений из 9, страница 1 из 1
26.01.2016, 10:23
    #39155287
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
Как создать ограничение на уникальность одного значения в поле.
Например, есть поле (колонка) f1 типа boolean. Требуется, чтобы в этом поле была только одна запись со значением TRUE,
остальные записи либо NULL, либо FALSE.
Спасибо.
...
Рейтинг: 0 / 0
26.01.2016, 12:47
    #39155435
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
big-trot,
триггер
...
Рейтинг: 0 / 0
26.01.2016, 12:56
    #39155445
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
big-trotКак создать ограничение на уникальностьуникальный индекс.Petro123триггерпродемонстрируешь?
...
Рейтинг: 0 / 0
26.01.2016, 13:09
    #39155459
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
p2.big-trotКак создать ограничение на уникальностьуникальный индекс.условный [с кляузой WHERE] уникальный индекс.


PS насчёт "продемонстрировать": -- заводим таблу для хранения разделяемых ресурсов. описываем в ней единственную строку для данной таблицы. ключ -- описатель ресурса. далее на ней (строке) по оному ключу очередь "на разделяемый ресурс" реализуется в триггере вполне сносно [даже без upsert-а, но с известным бубном]. но зачем, если есть условные (частичные) индексы.
...
Рейтинг: 0 / 0
26.01.2016, 13:41
    #39155506
kolts
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
Что надо делать когда пришло значение true в этой колонке, а такой уже есть?
Или вы смотрите есть ли true и если да вставляете false?
...
Рейтинг: 0 / 0
26.01.2016, 13:50
    #39155527
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
big-trotКак создать ограничение на уникальность одного значения в поле.
Например, есть поле (колонка) f1 типа boolean. Требуется, чтобы в этом поле была только одна запись со значением TRUE,
остальные записи либо NULL, либо FALSE.
Спасибо.

по самой постановке - задача кривая (вы что то не то и не так пытаетесь решить IMHO).
Но если очень хочется то вот так вот можно:
Код: plsql
1.
create unique index only_one_active_key on test((case when f1 is true then f1 else NULL end));



или вот так вот (более компактно если в таблице много строк):
Код: plsql
1.
create unique index only_one_active_key on test(f1) where (f1 is true);



--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
26.01.2016, 14:25
    #39155588
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
Еще раз всем спасибо.
Еще один вопрос.
Данную задачу (только ради понимания) можно решить через CONSTRAINT EXCLUDE, и если можно то как.
...
Рейтинг: 0 / 0
26.01.2016, 14:59
    #39155641
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
big-trotЕще раз всем спасибо.
Еще один вопрос.
Данную задачу (только ради понимания) можно решить через CONSTRAINT EXCLUDE, и если можно то как.

Я более менее могу придумать как это сделать но учитывая в официальной доке:
" Although it's allowed, there is little point in using B-tree or hash indexes with an exclusion constraint, because this does nothing that an ordinary unique constraint doesn't do better." смысла в этом нет.
А так по сути будет тоже самое решение что у меня просто записанное очень кривым образом.
...
Рейтинг: 0 / 0
26.01.2016, 23:37
    #39156125
kolts
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уникальность одного значения в поле
Отсутствует постановка задачи. "Требуется только одна запись со значением TRUE". Что надо делать со вставляемыми данными? В какой момент проверка на уникальность? Или в готово таблице надо так сделать?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Уникальность одного значения в поле / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]