20

在 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 删除)。

4

2 回答 2

34

除非您将search_pathGUC 设置为(或至少包括)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序列和视图)。vtiger_data_sld_the_geom_gist

于 2013-09-03T00:34:31.443 回答
-4

虽然不是特别有效,但这似乎起到了作用:

  1. 使用 pg_dump 转储表。
  2. 放下桌子。
  3. 使用 pg_dump 转储数据库。
  4. 删除数据库。
  5. 重新创建数据库并从转储文件重新加载。
于 2013-09-03T00:35:41.930 回答