【PostgreSQL】如何刪除還有活動連結的資料庫
阿新 • • 發佈:2018-12-31
當我們執行:
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();
執行上面的語句之後,在執行DROP操作,就可以刪除資料庫了。
上面語句說明:
pg_terminate_backend:用來終止與資料庫的連線的程序id的函式。
pg_stat_activity:是一個系統表,用於儲存服務程序的屬性和狀態。
pg_backend_pid():是一個系統函式,獲取附加到當前會話的伺服器程序的ID。