Entfernen Sie die Eindeutigkeit des Index in PostgreSQL


71

In meiner PostgreSQL-Datenbank habe ich einen eindeutigen Index erstellt, der folgendermaßen erstellt wurde:

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

Gibt es eine Möglichkeit, den Index zu ändern, um die eindeutige Einschränkung zu entfernen? Ich habe mir die ALTER INDEX-Dokumentation angesehen, aber sie scheint nicht das zu tun, was ich brauche.

Ich weiß, dass ich den Index entfernen und einen anderen erstellen kann, aber ich würde gerne einen besseren Weg finden, wenn er existiert.

Antworten:


107

Möglicherweise können Sie das eindeutige CONSTRAINTund nicht das INDEXselbst entfernen .

Überprüfen Sie Ihre CONSTRAINTSViaselect * from information_schema.table_constraints;

Wenn Sie dann eine finden, sollten Sie sie wie folgt fallen lassen können:

ALTER TABLE <my_table> DROP CONSTRAINT <constraint_name>

Bearbeiten: In dieser Frage wird ein verwandtes Problem beschrieben


2
Danke für den Vorschlag. Leider gibt es keine derartigen Einschränkungen.
Sergey Potapov

1
Ja, ich habe auch darüber nachgedacht, aber es in Postgres überprüft ... das Hinzufügen eines eindeutigen Index fügt der Tabelle keine Einschränkung hinzu ... es scheint Teil des Index selbst zu sein.
dcsohl

1
@dcsohl Yep. Das ist interessant, ich habe es mir angesehen und gemäß dieser Frage können eindeutige Einschränkungen Indizes erstellen (aber nicht umgekehrt)

2
@SergeyPotapov Diese Antwort löst das Problem Ihrer Frage nicht. Könnten Sie diese Frage erneut prüfen und die richtige Antwort auswählen ?
Vallismortis

36

Angenommen, Sie haben Folgendes:

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

Um die EINZIGARTIGE EINSCHRÄNKUNG zu löschen, verwenden Sie ALTER TABLE :

ALTER TABLE feature DROP CONSTRAINT feature_constraint;

Um den PRIMARY KEY zu löschen, verwenden Sie auch ALTER TABLE :

ALTER TABLE feature DROP CONSTRAINT feature_pkey;

Um den EINZIGARTIGEN [Index] zu löschen, würden Sie DROP INDEX verwenden :

DROP INDEX feature_unique;

5
Warum konnte die offizielle Dokumentation kein Beispiel wie dieses enthalten
Akash Singh

1
Vielen Dank. Das ist die richtige Antwort!
Michal Krča

6

Ich denke nicht, dass es möglich ist ... Selbst in der pgAdmin III-Benutzeroberfläche ist das Feld "Einzigartig" ausgegraut, wenn Sie versuchen, eine mit Ihrer Anweisung erstellte Einschränkung zu bearbeiten. Sie können es nicht über die Benutzeroberfläche ändern. In Kombination mit Ihrer Recherche zu den ALTER INDEX-Dokumenten würde ich sagen, dass dies nicht möglich ist.


0

Ich habe stundenlang nach der gleichen Frage gesucht und scheint keine richtige Antwort zu bekommen ---- Alle gegebenen Antworten haben einfach nicht funktioniert.

Für nicht null habe ich auch einige Zeit gebraucht, um zu finden. Anscheinend funktionieren die mehrheitlich zertifizierten Codes aus irgendeinem Grund nicht, wenn ich sie verwende.

Ich habe den nicht null Versionscode, so etwas

ALTER TABLE tablename
ALTER COLUMN column_want_to_remove_constriant
DROP NOT NULL

Leider funktioniert es nicht, 'nicht null' in 'einzigartig' zu ändern.


1
Dies scheint nicht mit der Frage zu tun zu haben, nach der ein Index geändert werden soll.
GreenTurtle

0

Wenn Sie PgAdmin4 installiert haben, ist es sehr einfach, die folgenden Schritte auszuführen ...

  1. Gehen Sie zu Tabelleneigenschaften (klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Eigenschaften aus).
  2. Ein Fenster wird geöffnet, bevor Sie im Eigenschaftenfenster zu Einschränkungen navigieren .
  3. In der Option " Einschränkungen " sehen Sie Optionen wie im folgenden Screenshot. Gehen Sie einfach zu " Einzigartig". Dort sehen Sie Spalten mit eindeutigen Einschränkungen. Klicken Sie auf die Schaltfläche Löschen und speichern Sie. Das war's, du bist gut zu gehen. Geben Sie hier die Bildbeschreibung ein
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.