首页 > 后端开发 > Golang > 正文

为什么我无法删除 Postgres 中的开放数据库?

Patricia Arquette
发布: 2024-11-19 10:28:02
原创
430 人浏览过

Why Can't I Drop an Open Database in Postgres?

在 Postgres 中删除打开数据库时出现问题

遇到错误

尝试删除数据库时,您可能会遇到错误:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板