powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите создать индекс
14 сообщений из 14, страница 1 из 1
Помогите создать индекс
    #38583115
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть справочник значений. В нем для каждого параметра лишь одна запись должна иметь by_default= true остальные должны быть false

param_values
---------------
id int PK,
param_id int FK,
by_default boolean,
value decimal

Помогите составить индекс
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583169
sp,

Код: sql
1.
2.
3.
4.
5.
CREATE UNIQUE INDEX uidx_param_values_param_id_by_default
  ON param_values
  USING btree
  (param_id, by_default)
  WHERE by_default = TRUE;
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583188
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spПомогите составить индекс

Вам точно нужен именно индекс? Может быть все же ограничение (constraint)?
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583212
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/\/\/\/\/\/\,

можно и ограничение
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583213
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто Нафаня,

этот индекс не ограничивает создание нескольких записей с by_default=true для одного param_id
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583222
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sp,

Или даже два.

Проверяем, что только один параметр имеет значение by_default равное TRUE.
Код: sql
1.
2.
ALTER TABLE param_values ADD
  CONSTRAINT uk_param_values_param_id_by_default UNIQUE (param_id, CASE WHEN by_default THEN TRUE ELSE NULL END);



(Теперь еще нужно гарантировать, что для одного параметра только уникальные значения. Это другое органичение)
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583229
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spэтот индекс не ограничивает создание нескольких записей с by_default=true для одного param_id

А что он тогда делает?

(Хотя да, можно и короче: ... ON param_values (param_id) WHERE by_default = TRUE... )
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583246
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/\/\/\/\/\/\,

создает индекс по условию - т.е. этот индекс будет применяться когда в запросе будет фигурировать param_id И by_default=true
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583260
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/\/\/\/\/\/\sp,

Или даже два.

Проверяем, что только один параметр имеет значение by_default равное TRUE.
Код: sql
1.
2.
ALTER TABLE param_values ADD
  CONSTRAINT uk_param_values_param_id_by_default UNIQUE (param_id, CASE WHEN by_default THEN TRUE ELSE NULL END);



(Теперь еще нужно гарантировать, что для одного параметра только уникальные значения. Это другое органичение)

выдает ошибку на CASE
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583291
/\/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sp/\/\/\/\/\/\,

создает индекс по условию - т.е. этот индекс будет применяться когда в запросе будет фигурировать param_id И by_default=true

Что не соответствует Вашему условию? Вам нужно что-то другое?

По второму пункту: продумайте, как написать CASE правильно (думаю, нужно указать WHEN by_default = TRUE) или воспользуйтесь другой функцией (например, NULLIF)
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583299
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто Нафаня,

прошу прощения - был неправ)
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583300
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/\/\/\/\/\/\/\,

вопрос решен, спасибо
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583446
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите создать индекс
    #38583486
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat,

спасибо, разобрался
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите создать индекс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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