每当我尝试删除数据库,我得到以下错误:

ERROR:  database "pilot" is being accessed by other users
DETAIL:  There is 1 other session using the database.

当我使用:

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';

我终止了来自该数据库的连接,但如果我试图在此之后删除数据库,则有人以某种方式自动连接到该数据库并给出此错误。那是什么? 除了我,没人用这个数据库。


当前回答

虽然我发现在其他场合获得最高票数的两个答案很有用,但今天,解决这个问题的最简单方法是意识到PyCharm可能会保持会话打开,如果我在PyCharm中单击“停止”,这可能会有所帮助。在浏览器中打开pgAdmin4后,我这样做了,几乎立即看到数据库会话统计数据降为0,此时我可以删除数据库。

其他回答

在Postgresql 13中更新

您可以使用此命令强制删除数据库,从而断开连接到它的每个用户/应用程序。

DROP DATABASE db_name WITH (FORCE)

你可以查看说明书了解更多信息。

力, 尝试终止到目标数据库的所有现有连接。如果目标数据库中存在准备好的事务、活动逻辑复制插槽或订阅,则它不会终止。

这是我们在postgres 12课程中使用的方法。使用pgadmin、pgbouncer和多个客户端应用程序。

REVOKE CONNECT ON DATABASE <mydbname> FROM public;
ALTER DATABASE <mydbname> allow_connections = off;
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '<mydbname>';
DROP DATABASE <mydbname>;

您需要确定的是使用DB的服务没有运行。

遇到同样的问题,运行一些Java应用程序,上面的选项都不起作用,甚至不能重新启动。

使用DB运行ps aux终止主服务。

kill -9 PID 或者如果应用程序作为服务运行,请确保为您的操作系统运行service stop cmd。

在此之后,删除表的默认方式将完美地工作。

在我的例子中是问题

虽然我发现在其他场合获得最高票数的两个答案很有用,但今天,解决这个问题的最简单方法是意识到PyCharm可能会保持会话打开,如果我在PyCharm中单击“停止”,这可能会有所帮助。在浏览器中打开pgAdmin4后,我这样做了,几乎立即看到数据库会话统计数据降为0,此时我可以删除数据库。

停止正在运行的应用程序。(在Eclipse中) 在你再试一次之后。