在PostgreSQL 9.2 / PostGIS 2.0.2中,我在空间列上有一个索引,用
创建CREATE INDEX tiger_data_sld_the_geom_gist ON tiger_data.sld USING gist(the_geom);
随后使用
删除索引DROP INDEX tiger_data_sld_the_geom_gist;
但是现在,当我尝试重新创建时,我收到了这个错误:
# 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
再次删除不起作用。它说索引不存在:
# DROP INDEX tiger_data_sld_the_geom_gist;
ERROR: index "tiger_data_sld_the_geom_gist" does not exist
我没有在任何数据库对象列表中找到关系“tiger_data_sld_the_geom_gist”,尝试过DROP TABLE,并搜索周围的解决方案。
这个神秘关系是什么“tiger_data_sld_the_geom_gist”,如何删除它以便我可以创建索引?
编辑:
还尝试重新启动服务器,并转储/删除/重新加载表(使用CASCADE删除)。
答案 0 :(得分:20)
除非您将search_path
GUC设置为(或至少包括)tiger_data
架构,否则您需要将架构添加到索引名称以发出DROP INDEX
(I' d在任何情况下都用它来保证安全):
DROP INDEX tiger_data.tiger_data_sld_the_geom_gist;
那是因为索引总是转到它所属的表的相同模式。如果上述方法无法解决您的问题,您可以检查此关系名称是否存在,以及它所在的每个架构中是否存在以下内容:
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';
它将返回类型(i
用于索引,r
用于表,S
用于序列,v
用于视图)的任何关系,其名称为{{ 1}}和它所属的架构的名称。
答案 1 :(得分:-1)
虽然不是特别有效,但这似乎已经成功了: