數據庫命令行或者管理工具中執行刪除數據庫的命令,
DROP DATABASE testdb;
的時候,可能會提示:
ERROR: database "testdb" is being accessed by other users DETAIL: There are 3 other sessions using the database.
這個意思是說,刪除數據庫失敗,因為這里還有3個鏈接連接到該數據庫上,PostgreSQL在有進程連接到數據庫時,對應的數據庫是不運行被刪除的。
那么怎么辦呢?
解決方式:斷開連接到這個數據庫上的所有鏈接,再刪除數據庫。怎么斷開呢?在PostgreSQL 9.2 及以上版本,執行下面的語句:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='testdb' AND pid<>pg_backend_pid();
--- 注:testdb 替換成自己的數據庫
執行上面的語句之后,在執行DROP操作,就可以刪除數據庫了。
上面語句說明:
pg_terminate_backend:用來終止與數據庫的連接的進程id的函數。
pg_stat_activity:是一個系統表,用於存儲服務進程的屬性和狀態。
pg_backend_pid():是一個系統函數,獲取附加到當前會話的服務器進程的ID。