尝试删除当前在 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中文网其他相关文章!