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

如何在postgresql中强制删除索引关系?,postgresql,postgis,postgresql-9.2,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

在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\u data\u sld\u the\u geom\u gist”关系,我尝试过删除表,并四处搜索解决方案

这个神秘的关系“tiger\u data\u sld\u the\u geom\u gist”是什么?我如何删除它以便创建索引

编辑:


还尝试重新启动服务器,并转储/删除/重新加载表(通过级联删除)。

除非您将
搜索路径设置为(或至少包括)tiger\u数据
模式,否则您需要将该模式添加到索引名以发布
删除索引
(为了安全起见,我会在任何情况下使用它):

这是因为索引总是指向它所属的表的同一架构。如果上述方法不能解决您的问题,您可以使用以下方法检查此关系名称是否存在,以及它所在的每个架构上是否存在此关系名称:

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
用于视图),该关系的名称为
tiger\u data\u sld\u geom\u gist
及其所属模式的名称。

虽然效率不高,但这似乎起到了作用:

  • 用pg_Dump转储表
  • 放下桌子
  • 使用pg_Dump转储数据库
  • 删除数据库
  • 重新创建数据库并从转储文件重新加载

  • 尝试“从pg_类中选择*并查看列出的内容。在relname、relnamespace上带条件和不带条件的情况下进行尝试,看看索引的使用是否会有所不同。很抱歉,在发布解决方案之前,我没有看到您的评论。我想现在执行选择不会揭示任何线索,因为我已经重建了所有内容。您的答案是在我编写我的解决方案时出现的。我不知道这是否“s是正确的还是错误的,所以如果是的话,我会让社区投票表决。”@kentr:我不能百分之百地保证这是真的,但似乎是,你(奇怪的,IMHO)的方法似乎隐藏了真正的问题…:-)。当锤子不起作用时,用大锤。。。(这是自嘲式的幽默)。我怀疑有比我更好的方法。@kentr在索引名之前添加schema_名称就成功了,谢谢。这可能是一个小型个人项目的解决方案,而不是一个正在运行的企业数据库。
    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';