2013-08-29 8 views
23

W mojej bazy danych PostgreSQL Mam unikatowy indeks tworzony w ten sposób:Usuń niepowtarzalności indeksu w PostgreSQL

CREATE UNIQUE INDEX my_index ON my_table USING btree (my_column) 

Czy istnieje sposób na zmianę indeksu do usunięcia unique? Spoglądałem przez cały czas: ALTER INDEX documentation, ale wydaje mi się, że nie robię tego, czego potrzebuję.

Wiem, że mogę usunąć indeks i utworzyć inny, ale chciałbym znaleźć lepszy sposób, jeśli istnieje.

Odpowiedz

32

Możliwe, że będziesz w stanie usunąć unikatową CONSTRAINT, a nie samą CONSTRAINT.

Sprawdź swój CONSTRAINTS poprzez select * from information_schema.table_constraints;

Następnie, jeśli znajdziesz, powinieneś być w stanie upuścić go lubię:

ALTER TABLE "my_table" DROP CONSTRAINT "unique_something"

Edit: powiązany problem jest opisany w this question

+0

Dzięki za sugestię. Niestety nie ma takich ograniczeń. –

+0

Tak, też o tym myślałem, ale sprawdziłem w Postgresie ... dodanie unikalnego indeksu nie powoduje ograniczenia do tabeli ... wydaje się być częścią samego indeksu. – dcsohl

+0

@dcsohl Tak. To jest interesujące, zajrzałem do tego i zgodnie z [to pytanie] (http://stackoverflow.com/questions/6239657/postgresql-can-you-create-an-index-in-the-create-table-definition## 6239678) unikalne ograniczenia mogą tworzyć indeksy (ale nie na odwrót) –

4

Nie sądzę, że to możliwe ... nawet w interfejsie pgAdmin III, jeśli próbujesz edytować ograniczenie utworzone za pomocą instrukcji, pole "Unikatowe" jest wyszarzone; nie można go zmienić za pomocą interfejsu użytkownika. W połączeniu z twoimi badaniami na dokumentach ALTER INDEX, powiedziałbym, że nie da się tego zrobić.

2

Załóżmy, że masz:

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

Aby upuścić UNIQUE, należy użyć ALTER TABLE:

ALTER TABLE feature DROP CONSTRAINT feature_constraint; 

Aby upuścić UNIQUE [indeks], należałoby użyć DROP INDEX:

DROP INDEX feature_unique; 
+1

dlaczego oficjalna dokumentacja nie mogła zawierać takiego przykładu –