Удалить уникальность индекса в PostgreSQL

В моей базе данных PostgreSQL у меня есть уникальный индекс, созданный следующим образом:

CREATE UNIQUE INDEX <my_index> ON <my_table> USING btree (my_column)

Есть ли способ изменить индекс, чтобы удалить ограничение уникальности? Я посмотрел документацию ALTER INDEX, но, похоже, она не выполняет то, что мне нужно.

Я знаю, что могу удалить индекс и создать другой, но я бы хотел найти лучший способ, если он существует.

Ответы

Ответ 1

Вы можете удалить уникальный CONSTRAINT, а не сам INDEX.

Проверьте свой CONSTRAINTS через select * from information_schema.table_constraints;

Тогда, если вы найдете такой файл, вы сможете удалить его следующим образом:

ALTER TABLE <my_table> DROP CONSTRAINT <constraint_name>

Изменение: связанная с этим проблема описана в этом вопросе

Ответ 2

Предположим, у вас есть следующее:

Indexes:
    "feature_pkey" PRIMARY KEY, btree (id, f_id)
    "feature_unique" UNIQUE, btree (feature, f_class)
    "feature_constraint" UNIQUE CONSTRAINT, btree (feature, f_class)

Чтобы отбросить УНИКАЛЬНОЕ ОГРАНИЧЕНИЕ, вы должны использовать ALTER TABLE:

ALTER TABLE feature DROP CONSTRAINT feature_constraint;

Чтобы опустить ПЕРВИЧНЫЙ КЛЮЧ, вы также должны использовать ALTER TABLE:

ALTER TABLE feature DROP CONSTRAINT feature_pkey;

Чтобы удалить УНИКАЛЬНЫЙ [индекс], вы должны использовать DROP INDEX:

DROP INDEX feature_unique;

Ответ 3

Я не думаю, что это возможно... даже в пользовательском интерфейсе pgAdmin III, если вы попытаетесь отредактировать ограничение, созданное с помощью вашего оператора, поле "Уникальный" будет выделено серым цветом; вы не можете изменить его через пользовательский интерфейс. В сочетании с вашими исследованиями в документах ALTER INDEX я бы сказал, что это невозможно.