首頁 >後端開發 >Golang >為什麼我無法刪除 Postgres 中的開放資料庫?

為什麼我無法刪除 Postgres 中的開放資料庫?

Patricia Arquette
Patricia Arquette原創
2024-11-19 10:28:02500瀏覽

Why Can't I Drop an Open Database in Postgres?

在Postgres 中刪除開啟資料庫時出現問題

遇到錯誤

嘗試刪除資料庫時,您可能會遇到錯誤:

pq: cannot drop the currently open database

了解問題

出現此錯誤是因為您試圖刪除目前連線的資料庫。刪除資料庫會使所有開啟的連線失效,包括您正在使用的連線。

建議解決方案

要解決此問題,建議連接到其他資料庫並執行 DROP DATABASE從那裡發出命令。這可確保您有一個活動連線來執行命令,同時避免刪除目前資料庫的問題。

範例程式碼:

// Connect to a secondary database
otherDbConn, err := sql.Open("postgres", "host=localhost port=5432 user=username dbname=otherdb")
if err != nil {
  return err
}

// Execute DROP DATABASE command on other database
_, err = otherDbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
if err != nil {
  return err
}

// Close the connection to the other database
otherDbConn.Close()

替代解決方案:強制客戶端斷開連接

如果您無法連接到另一個資料庫或不願意連接,您可以強制中斷所有客戶端與您想要刪除的資料庫的連線。這需要超級使用者權限,應謹慎使用。

對於Postgres 9.2 以下版本:

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';

對於Postgres 9.2 及以上版本:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';

強制後斷開所有客戶端的連接,您可以連接到不同的資料庫並執行DROP DATABASE 命令。

以上是為什麼我無法刪除 Postgres 中的開放資料庫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn