嘗試刪除目前在Postgres 中連接的資料庫時,可能會遇到以下錯誤:
pq: cannot drop the currently open database
出現此錯誤是因為資料庫刪除需要與要刪除的資料庫建立關閉連線。混亂在於,如果連線關閉,則無法使用 dbConn.Exec 執行 DROP DATABASE。
刪除目前連接的資料庫的建議方法是連接到不同的資料庫,然後從那裡執行 DROP DATABASE 命令。這是因為與正在刪除的資料庫的連接在刪除後變得無效。
例如:
import "github.com/lib/pq" ... func dropDatabase(dbName string) error { // Connect to a different database (e.g., template1) otherConn, err := pq.Open("other_conn_string") if err != nil { return err } defer otherConn.Close() // Drop the desired database from the other connection _, err = otherConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName)) return err }
在以下情況下不同的客戶端連接到被刪除的資料庫,並且需要緊急刪除,您可以使用下列命令強制中斷所有客戶端與目標資料庫的連線(根據PostgreSQL版本不同,要求也不同):
-- PostgreSQL < 9.2 SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb'; -- PostgreSQL >= 9.2 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
注意: 使用超級使用者權限執行這些指令。一旦客戶端被強制斷開連接,您就可以連接到不同的資料庫並執行 DROP DATABASE 命令。
以上是如何刪除目前連接的 PostgreSQL 資料庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!