在 Postgres 中删除已连接的数据库
您在尝试删除当前连接的数据库时遇到错误:“pq:无法删除当前打开的数据库。”此错误源于 Postgres 中的预期行为,该行为禁止删除与其活动连接的数据库。
此行为是有道理的,因为删除数据库会使引用该数据库的所有打开连接失效。要成功删除数据库,您必须确保不存在活动连接。
推荐方法
推荐方法是连接到不同的数据库并执行 DROP DATABASE 命令从那个连接。这可确保您与要删除的数据库没有任何打开的连接。
强制断开客户端
在其他客户端连接到数据库的情况下你需要删除,你可以强行断开它们。请注意,这需要超级用户权限。
对于 9.2 之前的 PostgreSQL 版本:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
对于 PostgreSQL 9.2 及更高版本:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
所有客户端被强制断开后,您可以连接到不同的数据库并再次执行 DROP DATABASE 命令。
附加说明
在您的特定代码示例中,您尝试在执行 DROP DATABASE 命令后关闭连接。此步骤是不必要的,并且可能会导致意外行为。只需在执行 DROP DATABASE 命令之前连接到不同的数据库,您将成功关闭与已删除的数据库的连接。
以上是如何删除当前连接的 Postgres 数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!