我曾尝试下面的命令为Postgres的(超级)用户和所有者用户:如何在PostgreSQL 9.6中删除索引?
Drop index <index_name>;
Drop index <index_name> cascade;
Drop index concurrently <index_name>;
查询不给任何错误,但处于挂起状态,直到永远取消。
我曾尝试下面的命令为Postgres的(超级)用户和所有者用户:如何在PostgreSQL 9.6中删除索引?
Drop index <index_name>;
Drop index <index_name> cascade;
Drop index concurrently <index_name>;
查询不给任何错误,但处于挂起状态,直到永远取消。
您的陈述一般都可以。还有其他进程在索引上锁定,防止完成丢弃语句。您可以看到积极的语句
SELECT * FROM pg_stat_activity;
如果需要,您应该设置log_statement
。
编辑:pg_locks
会向您提供有关特定锁:
SELECT a.datname,
c.relname,
l.transactionid,
l.mode,
l.GRANTED,
a.usename,
a.query,
a.query_start,
age(now(), a.query_start) AS "age",
a.pid
FROM pg_stat_activity a
JOIN pg_locks l ON l.pid = a.pid
JOIN pg_class c ON c.oid = l.relation
ORDER BY a.query_start;
是的,它的工作。关闭依赖会话后,我能够删除索引。 – user5579599
'pg_locks'通常会提供更多信息。 –
@CraigRinger:你说得对。我已经延长了我的答案。 – clemens
你的语句是一般正常。您可能还有其他任务正在数据库中运行,从而阻止完成。 – clemens
是的,情况可能如此。有什么方法可以找出哪个查询/会话正在使用索引? – user5579599
https://wiki.postgresql.org/wiki/Lock_Monitoring –