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

xmjla07d  于 2023-01-22  发布在  Go
关注(0)|答案(9)|浏览(413)

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

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

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

yyyllmsg

yyyllmsg1#

因为,您正在尝试对数据库执行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命令。

rt4zxlrg

rt4zxlrg2#

如果您在IntelliJ中遇到这个问题,请使用下面的下拉菜单将模式更改为postgres。
从那以后,我能够下降一个db。

jmo0nnb3

jmo0nnb33#

我在Windows 10中使用PostgreSQL 12和pgAdmin-4。我必须使用上述答案的组合来删除数据库,我无法在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,它就消失了。

im9ewurl

im9ewurl4#

只需使用\c db_name;连接到其他数据库然后使用删除数据库db_name删除所需的数据库;

iecba09b

iecba09b5#

如果您使用的是DBeaver,请确保未连接到尝试删除的数据库。请转到“编辑连接”并查看数据库名称。
将连接切换到其他数据库,然后删除所需的数据库。

zvms9eto

zvms9eto6#

要删除数据库:
\c postgres
那么DROP DATABASE your_database就可以工作了

jk9hmnmh

jk9hmnmh7#

这很简单,只需连接到另一个数据库\c database2。连接后,在连接到另一个数据库时执行drop database命令。

pepwfjgg

pepwfjgg8#

这些对我来说都不起作用,因为我试图通过pgAdmin来完成,它会在我删除数据库连接时保持数据库连接打开。
解决方案:

C:\Program Files\PostgreSQL\11\scripts\runpsql.bat

后你提供正确的信息你将能够得到pg命令提示符,在这里你可以只键入:

dbdrop yourdatabase

之后,您可能仍然会看到数据库在pgAdmin中,但现在你可以简单地删除它与右键单击和DELETE/DROP选项。

b1uwtaje

b1uwtaje9#

您可以使用以下命令强制删除数据库:DROP DATABASE mydb WITH (FORCE)

相关问题