1. 程式人生 > >【PostgreSQL】如何刪除還有活動連結的資料庫

【PostgreSQL】如何刪除還有活動連結的資料庫

當我們執行:

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。