2013-11-20 2 views
0

Я хочу создать уникальный индекс в столбцах mobile_number_1 и mobile_number_2.Postgresql Создать уникальный индекс

, по которым mobile_number_1 значения не получают повторен в mobile_number_1, а также в mobile_number_2

и не mobile_number_2 получить повторен в mobile_number_1, а также mobile_number_2

моя структура таблицы:

id | mobile_number_1 | mobile_number_2 | city 
+1

почему бы вам не создать ребенку таблицу с мобильными номерами? Это более реляционный подход –

ответ

3

Я думаю, что это должен сделать это (не проверял его тщательно, хотя)

create unique index idx_unique_mobile_number1 
on person (least(mobile_number_1, mobile_number_2)); 

create unique index idx_unique_mobile_number2 
on person (greatest(mobile_number_1, mobile_number_2)); 
+0

Другой возможностью может быть «alter table person add phone_excl exclude», используя gist ((array [phone1, phone2]) с &&); ', если бы был необходимый класс оператора. –

+0

@Denis: хорошая идея. Я всегда забываю об ограничениях на исключение. Вы должны добавить это как ответ –

+0

Nah, мне нравится ваше лучше. Исключению требуется дополнительно создать операторский класс для массивов varchar. :-P –

-3

То есть практически невозможно, вам нужно сделать в своем коде, добавить триггер или правило. Индексы предназначены только для одного столбца или нескольких столбцов.

+1

Это неверно: на самом деле * возможно *. Вероятно, это тоже был комментарий или расширен, поэтому он немного более подробный. –

+0

да, я думаю, спасибо, выше ответ заставило меня узнать что-то новое – jaynakus

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