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

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


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()

}

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


偶然的你
浏览 1226回答 3
3回答

哔哔one

因为,您正试图dropDb在数据库上执行命令,您已打开连接到该数据库。根据 postgres 文档:您无法连接到要删除的数据库。相反,连接到 template1 或任何其他数据库并再次运行此命令。这是有道理的,因为当你删除整个数据库时,所有引用该数据库的打开连接都变得无效,所以推荐的方法是连接到不同的数据库,然后再次执行此命令。如果您面临这样一种情况,即不同的客户端连接到数据库,并且您确实想删除该数据库,则可以强制断开所有客户端与该特定数据库的连接。例如,强制断开所有客户端与数据库的连接mydb:如果 PostgreSQL < 9.2SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';别的SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';注意:此命令需要超级用户权限。然后,您可以连接到不同的数据库,并dropDb再次运行命令。

慕工程0101907

如果您在 IntelliJ 中遇到此问题,请使用以下下拉列表将架构更改为 postgres。在那之后,我能够删除一个数据库。

犯罪嫌疑人X

我在 Windows 10 中使用 PostgreSQL 12 和 pgAdmin-4。我不得不使用上述答案的组合来删除一个数据库,我无法在 pgAdmin 中删除它,因为我无法关闭 pgAdmin 中的所有打开的连接。关闭 pgAdmin-4。在 Windows 命令行中,假设我的服务器名称是 postgres,我的数据库是 mydb:C:\>&nbsp;psql&nbsp;-U&nbsp;postgres我用我的服务器密码登录。然后我关闭了与 mydb 的所有打开的连接:postgres-#&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;pg_stat_activity&nbsp;WHERE&nbsp;pg_stat_activity.datname='mydb'; postgres-#&nbsp;SELECT&nbsp;pg_terminate_backend(pid)&nbsp;FROM&nbsp;pg_stat_activity&nbsp;WHERE&nbsp;datname&nbsp;=&nbsp;'mydb';最后,我成功删除了 mydb:postgres-#&nbsp;DROP&nbsp;DATABASE&nbsp;mydb;现在,如果我回到 pgAdmin-4,它就消失了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go