Postgresql 无法在postgres中删除索引,因为它不存在

Postgresql 无法在postgres中删除索引,因为它不存在,postgresql,database-indexes,Postgresql,Database Indexes,在postgres数据库中,我有一个唯一的约束和两个唯一的索引。我使用下面的查询删除了约束 alter table my_schema.users drop constraint users_dept_uk drop index my_schema.users_dept_idx 它已删除约束和一个索引,但还有第二个索引仍然存在 下面的查询仍然提供索引存在 SELECT r.relname, r.relkind, n.nspname FROM pg_class r INNER JOIN pg_

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

alter table my_schema.users drop constraint users_dept_uk
drop index my_schema.users_dept_idx
它已删除约束和一个索引,但还有第二个索引仍然存在

下面的查询仍然提供索引存在

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
当我执行下面的查询时

alter table my_schema.users drop constraint users_dept_uk
drop index my_schema.users_dept_idx
我发现了错误

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

我错过了什么?由于此索引,无法删除它,也无法插入数据,我不再需要此索引。

奇怪的是,索引名称需要在其周围加引号。下面的命令工作得非常好,并且删除了索引

drop index my_schema."users_dept_idx"

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