it-swarm.com.de

Wie erzwinge ich eine Drop-Index-Beziehung in postgresql?

In PostgreSQL 9.2/PostGIS 2.0.2 hatte ich einen Index für eine räumliche Spalte, die mit erstellt wurde

CREATE INDEX tiger_data_sld_the_geom_Gist ON tiger_data.sld USING Gist(the_geom);

Anschließend löschte der Index mit

DROP INDEX tiger_data_sld_the_geom_Gist;

Aber jetzt, wenn ich versuche, neu zu erstellen, erhalte ich diesen Fehler:

#  CREATE INDEX tiger_data_sld_the_geom_Gist ON tiger_data.sld USING Gist(the_geom);
ERROR:  relation "tiger_data_sld_the_geom_Gist" already exists

Nochmaliges Fallenlassen funktioniert nicht. Es heißt, dass der Index nicht existiert:

# DROP INDEX tiger_data_sld_the_geom_Gist;
ERROR:  index "tiger_data_sld_the_geom_Gist" does not exist

Ich habe die Beziehung "tiger_data_sld_the_geom_Gist" in keiner Liste von Datenbankobjekten gefunden, DROP TABLE ausprobiert und nach Lösungen gesucht.

Was ist diese mysteriöse Beziehung "tiger_data_sld_the_geom_Gist" und wie entferne ich sie, damit ich den Index erstellen kann?

Bearbeiten:

Ich habe auch versucht, den Server neu zu starten und die Tabelle zu sichern/löschen/neu zu laden (gelöscht mit CASCADE).

12
kentr

Wenn Sie den search_path-GUC nicht auf das tiger_data-Schema einstellen (oder es zumindest einschließen), müssen Sie das Schema dem Indexnamen hinzufügen, um den DROP INDEX auszugeben (ich würde es auf jeden Fall zur Sicherheit verwenden):

DROP INDEX tiger_data.tiger_data_sld_the_geom_Gist;

Das liegt daran, dass der Index immer zu demselben Schema der Tabelle gehört, zu der er gehört. Wenn das oben genannte Problem Ihr Problem nicht löst, können Sie überprüfen, ob dieser Beziehungsname vorhanden ist, und in jedem Schema ist Folgendes enthalten:

SELECT r.relname, r.relkind, n.nspname
FROM pg_class r INNER JOIN pg_namespace n ON r.relnamespace = n.oid
WHERE r.relname = 'tiger_data_sld_the_geom_Gist';

Sie gibt die Art (i für Indizes, r für Tabellen, S für Sequenzen und v für Ansichten) einer Relation mit dem Namen tiger_data_sld_the_geom_Gist und dem Namen des Schemas zurück, zu dem sie gehört.

20
MatheusOl

Obwohl dies nicht besonders effizient ist, scheint dies den Trick getan zu haben:

  1. Legen Sie die Tabelle mit pg_dump ab.
  2. Lass den Tisch fallen.
  3. Legen Sie die Datenbank mit pg_dump ab.
  4. Löschen Sie die Datenbank.
  5. Erstellen Sie die Datenbank neu und laden Sie sie erneut aus den Speicherauszugsdateien.
0
kentr