【问题标题】:Cannot drop index in postgres because it does not exists无法在 postgres 中删除索引,因为它不存在
【发布时间】:2020-03-21 15:03:51
【问题描述】:

在 postgres 数据库中,我有一个唯一约束和为其创建的两个唯一索引。我使用以下查询删除了约束

alter table my_schema.users drop constraint users_dept_uk

它已经删除了约束和一个索引,但第二个索引仍然存在。

下面的查询仍然给出索引存在

SELECT r.relname, r.relkind, n.nspname
FROM pg_class r INNER JOIN pg_namespace n ON r.relnamespace = n.oid
WHERE r.relname = 'users_dept_idx';

给出以下输出

users_dept_idx, i, my_schema

当我执行以下查询时

drop index my_schema.users_dept_idx

我收到了错误

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedObject) index "users_dept_idx" does not exist

我在这里缺少什么?由于这个我不再需要的索引,无法删除它并且无法插入数据。

【问题讨论】:

  • 您确定在所有这些操作中都连接到同一个数据库吗?为什么你使用 python 而不是 psql 似乎是一个交互式用例?
  • 您的所有输入和输出是逐字复制的,还是您尝试手动匿名化它们?
  • 你必须确保你在正确的数据库上下文中,看起来你的炼金术运行是在一个不保存索引的数据库上发生的,大多数我在人们看到这个再次使用默认值,即 postgres db。
  • 我正在使用 python 模块 sqlachemy,上面的查询是使用 'engine.execute()' 执行的。我确定我正在连接到同一个数据库,因为没有其他数据库
  • 我也有。删除时不存在,列出或创建时->已经存在。

标签: postgresql database-indexes


【解决方案1】:

索引名称需要引号引起来很奇怪。下面的命令工作得很好,也删除了索引

drop index my_schema."users_dept_idx"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多