尝试删除数据库时,您可能会遇到错误:
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中文网其他相关文章!