在 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 删除)。
最佳答案
除非您将 search_path
GUC 设置为(或至少包括)tiger_data
模式,否则您需要将模式添加到索引名称以发出 DROP INDEX
(为了安全起见,我会在任何情况下使用它):
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
对于 View )具有名称 tiger_data_sld_the_geom_gist
及其所属架构名称的任何关系。
关于postgresql - 如何在 postgresql 中强制删除索引关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580590/