gpt4 book ai didi

postgresql - Postgres 删除数据库错误 : pq: cannot drop the currently open database

转载 作者:IT老高 更新时间:2023-10-28 13:05:49 28 4
gpt4 key购买 nike

我正在尝试像这样删除当前连接的数据库,但出现此错误:

pq: cannot drop the currently open database

我真的不明白如果我必须关闭我的连接,我应该如何删除数据库,因为我认为我将无法使用 dbConn.Exec 来执行我的 DROP DATABASE 语句?

dbConn *sql.DB

func stuff() error {
_, err := dbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))
if err != nil {
return err
}

return dbConn.Close()
}

我想我可以连接到不同的数据库,然后在该连接上执行它,但我什至不确定这是否可行,而且为了删除一个新的数据库而必须连接到一个新数据库似乎真的很奇怪不同的数据库。有任何想法吗?谢谢。

最佳答案

因为,您正试图在已打开连接的数据库上执行 dropDb 命令。

根据 postgres 文档:

You cannot be connected to the database you are about to remove. Instead, connect to template1 or any other database and run this command again.

这是有道理的,因为当你删除整个数据库时,所有引用该数据库的打开连接都变得无效,所以推荐的方法是连接到不同的数据库,然后再次执行该命令。

如果您面临不同的客户端连接到数据库的情况,并且您确实想要删除数据库,则可以强制断开所有客户端与该特定数据库的连接。

例如,强制断开所有客户端与数据库mydb:

如果 PostgreSQL < 9.2

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

否则

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

注意:此命令需要 super 用户权限。

然后,您可以连接到不同的数据库,并再次运行 dropDb 命令。

关于postgresql - Postgres 删除数据库错误 : pq: cannot drop the currently open database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502401/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com