Dans PostgreSQL 9.2/PostGIS 2.0.2, j’avais un index sur une colonne spatiale, créé avec
CREATE INDEX tiger_data_sld_the_geom_Gist ON tiger_data.sld USING Gist(the_geom);
Par la suite abandonné l'index avec
DROP INDEX tiger_data_sld_the_geom_Gist;
Mais maintenant, quand j'essaye de recréer, j'obtiens cette erreur:
# 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
Redémarrer ne fonctionne pas. Il dit que l'index n'existe pas:
# DROP INDEX tiger_data_sld_the_geom_Gist;
ERROR: index "tiger_data_sld_the_geom_Gist" does not exist
Je n'ai pas trouvé la relation "tiger_data_sld_the_geom_Gist" dans une liste d'objets de base de données, j'ai essayé DROP TABLE et cherché des solutions.
Quelle est cette relation mystérieuse "tiger_data_sld_the_geom_Gist", et comment puis-je la supprimer pour pouvoir créer l'index?
Modifier:
Nous avons également essayé de redémarrer le serveur et de décharger/déposer/recharger la table (supprimé avec CASCADE).
Sauf si vous définissez le code search_path
GUC sur (ou du moins en incluant) le schéma tiger_data
, vous devez ajouter le schéma au nom de l'index pour générer le DROP INDEX
(je l'utiliserais de toute façon par sécurité):
DROP INDEX tiger_data.tiger_data_sld_the_geom_Gist;
C'est parce que l'index va toujours au même schéma de la table à laquelle il appartient. Si les solutions ci-dessus ne résolvent pas votre problème, vous pouvez vérifier si ce nom de relation existe et qu'il figure sur chaque schéma, avec les éléments suivants:
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';
Il renverra le type (i
pour les index, r
pour les tables, S
pour les séquences et v
pour les vues) de toute relation portant le nom tiger_data_sld_the_geom_Gist
et le nom du schéma auquel elle appartient.
Bien que pas particulièrement efficace, cela semble avoir fait le tour: