为了账号安全,请及时绑定邮箱和手机立即绑定

Postgres 删除数据库错误:pq:无法删除当前打开的数据库

Postgres 删除数据库错误:pq:无法删除当前打开的数据库

Go
偶然的你 2022-01-04 10:15:29
我正在尝试删除我当前连接的数据库,但出现此错误:pq: cannot drop the currently open database我真的不明白如果我必须关闭我的连接,我应该如何删除数据库,因为那样我认为我将无法使用 dbConn.Exec 来执行我的 DROP DATABASE 语句?dbConn *sql.DBfunc stuff() error {  _, err := dbConn.Exec(fmt.Sprintf(`DROP DATABASE %s;`, dbName))  if err != nil {    return err  }  return dbConn.Close()}我想我可以连接到不同的数据库,然后在该连接上执行它,但我什至不确定这是否可行,而且为了删除不同的数据库而必须连接到新数据库似乎真的很奇怪。有任何想法吗?谢谢。
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

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

根据 postgres 文档:

您无法连接到要删除的数据库。相反,连接到 template1 或任何其他数据库并再次运行此命令。

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

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

例如,强制断开所有客户端与数据库的连接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';

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

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


查看完整回答
反对 回复 2022-01-04
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

如果您在 IntelliJ 中遇到此问题,请使用以下下拉列表将架构更改为 postgres。

在那之后,我能够删除一个数据库。

//img1.sycdn.imooc.com//61d3ade100019ead03560259.jpg

查看完整回答
反对 回复 2022-01-04
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我在 Windows 10 中使用 PostgreSQL 12 和 pgAdmin-4。我不得不使用上述答案的组合来删除一个数据库,我无法在 pgAdmin 中删除它,因为我无法关闭 pgAdmin 中的所有打开的连接。

关闭 pgAdmin-4。

在 Windows 命令行中,假设我的服务器名称是 postgres,我的数据库是 mydb:

C:\> psql -U postgres

我用我的服务器密码登录。

然后我关闭了与 mydb 的所有打开的连接:

postgres-# SELECT * FROM pg_stat_activity WHERE pg_stat_activity.datname='mydb';
postgres-# SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';

最后,我成功删除了 mydb:

postgres-# DROP DATABASE mydb;

现在,如果我回到 pgAdmin-4,它就消失了。


查看完整回答
反对 回复 2022-01-04
  • 3 回答
  • 0 关注
  • 1225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信