postgresql - 如何在 postgresql 中强制删除索引关系?

标签 postgresql postgis postgresql-9.2

在 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,序列为Sv对于 View )具有名称 tiger_data_sld_the_geom_gist 及其所属架构名称的任何关系。

关于postgresql - 如何在 postgresql 中强制删除索引关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580590/

相关文章:

postgresql - 在过滤未索引的列后是否可以从 PostGIS 地理空间索引中读取?

sql - 如何从 PostGIS 中的 MultiLineString 获取第 N 个 LineString?

postgresql - 将 OSM 文件导入 Windows10 上的 PostGis

postgresql - Postgres 9.2 pg_largeobject 表空间

hibernate - 在 JBoss AS 7 中捕获由 hibernate JPA 生成的最终 SQL 查询

PostgreSQL 匹配表之间的多个值

python - 无法删除表,因为其他对象依赖于它

sql - 将列从带时区的时间更改为时间戳

python - 如何使用python在postgres中获取插入或选择的行ID

sql - postgresql UPDATE 查询永远需要 3m 行