Wie kann ich alle Indizes einer Tabelle in Postgres löschen?

9

Ich habe dieses Problem weiterhin: Ich habe 20 Indizes auf einer Tabelle, die ich fallen lassen muss, um Tests zu machen. Durch das Löschen der Tabelle werden nicht alle Metadaten gelöscht.

Es scheint keine Wildcard drop index ix_table_* oder irgendeinen nützlichen Befehl zu geben. Es scheint einige Bash-Schleifen um psql zu geben, die du schreiben kannst.
Es muss etwas Besseres geben! Gedanken?

    
Erin 01.12.2015, 00:10
quelle

2 Antworten

10

Angenommen, Sie möchten nur einfache Indizes löschen:

%Vor%

Erreicht keine Indizes, die als Implementierungsdetails von Einschränkungen erstellt wurden ( UNIQUE , PK , EXCLUDE ).
Die Dokumentation:

%Vor%      

Das abhängige Objekt wurde als Teil der Erstellung des referenzierten Objekts erstellt   Objekt, und ist wirklich nur ein Teil seiner internen Implementierung.

Sie könnten dies in eine Funktion für die wiederholte Ausführung einfügen.
Verwandt:

Beiseite: Dies ist ein Missverständnis:

  

Beim Löschen der Tabelle werden nicht alle Metadaten gelöscht.

Durch das Löschen einer Tabelle immer werden alle Indizes in der Tabelle durchsucht.

    
Erwin Brandstetter 01.12.2015 02:46
quelle
2

So entferne ich alle Indizes von Postgres, ausgenommen alle pkey.

%Vor%

Um auszuführen:

%Vor%

Bevor ich tatsächlich 'DROP INDEX xxx' ausführte, würde ich die Zeile 'EXECUTE ...' mit '-' auskommentieren und die Zeile 'RAISE INFO' auskommentieren, sie mit 'select func_name ();' und überprüfen Sie, dass ich nicht etwas fallen lasse, was ich nicht tun sollte.

Für unsere Anwendung haben wir alle Schemaanweisungen einschließlich der Erstellung von Indizes in einer Datei app.sql . Bevor dieses ganze Projekt in Produktion geht, wollen wir alle historisch erstellten Indizes bereinigen und sie dann neu erstellen mit:

%Vor%

Hoffe, das hilft.

    
Emily 04.09.2017 03:03
quelle