web-dev-qa-db-fra.com

Supprimer l'unicité de l'index dans PostgreSQL

Dans ma base de données PostgreSQL, j'ai un index unique créé de cette façon:

CREATE UNIQUE INDEX my_index ON my_table USING btree (my_column)

Existe-t-il un moyen de modifier l'index pour supprimer une contrainte unique? J'ai regardé attentivement documentation ALTER INDEX mais il ne semble pas faire ce dont j'ai besoin.

Je sais que je peux supprimer l'index et en créer un autre, mais j'aimerais trouver un meilleur moyen s'il existe.

49
Sergey Potapov

Vous pourrez peut-être supprimer l'unique CONSTRAINT, et non le INDEX lui-même.

Vérifiez votre CONSTRAINTS via select * from information_schema.table_constraints;

Ensuite, si vous en trouvez un, vous devriez pouvoir le déposer comme:

ALTER TABLE "my_table" DROP CONSTRAINT "unique_something"

Edit: un problème connexe est décrit dans cette question

79
user2062950

Supposons que vous disposez des éléments suivants:

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

Pour supprimer la CONTRAINTE UNIQUE, vous utiliseriez ALTER TABLE :

ALTER TABLE feature DROP CONSTRAINT feature_constraint;

Pour supprimer la CLÉ PRIMAIRE, vous devez également utiliser ALTER TABLE :

ALTER TABLE feature DROP CONSTRAINT feature_pkey;

Pour supprimer l'UNIQUE [index], vous utiliseriez DROP INDEX :

DROP INDEX feature_unique;
19
vallismortis

Je ne pense pas que ce soit possible ... même dans l'interface utilisateur de pgAdmin III, si vous essayez de modifier une contrainte créée avec votre instruction, la case "Unique" est grisée; vous ne pouvez pas le changer via l'interface utilisateur. Combiné à vos recherches sur les documents ALTER INDEX, je dirais que cela ne peut pas être fait.

5
dcsohl