2017-10-17 104 views
2

我曾嘗試下面的命令爲Postgres的(超級)用戶和所有者用戶:如何在PostgreSQL 9.6中刪除索引?

Drop index <index_name>; 
Drop index <index_name> cascade; 
Drop index concurrently <index_name>; 

查詢不給任何錯誤,但處於掛起狀態,直到永遠取消。

+2

你的語句是一般正常。您可能還有其他任務正在數據庫中運行,從而阻止完成。 – clemens

+0

是的,情況可能如此。有什麼方法可以找出哪個查詢/會話正在使用索引? – user5579599

+3

https://wiki.postgresql.org/wiki/Lock_Monitoring –

回答

4

您的陳述一般都可以。還有其他進程在索引上鎖定,防止完成丟棄語句。您可以看到積極的語句

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; 
+1

是的,它的工作。關閉依賴會話後,我能夠刪除索引。 – user5579599

+0

'pg_locks'通常會提供更多信息。 –

+0

@CraigRinger:你說得對。我已經延長了我的答案。 – clemens