我曾嘗試下面的命令爲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 –