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

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';

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


当前回答

每当我尝试删除数据库时,我得到:

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

首先你需要撤销

REVOKE CONNECT ON DATABASE TARGET_DB FROM public;

然后使用:

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

它肯定会起作用。

其他回答

在我的例子中,即使在使用下面的命令之后,我仍然得到错误——因为在执行后立即创建了另一个用户连接。

撤销数据库<db_name>的连接

什么固定它为我使用地狱的解决方案上面(也下面),以防止连接。

ALTER DATABASE <db_name> allow_connections = off

这使我可以终止流程,而无需立即重新创建流程。

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.piddatname = 'TARGET_DB'——←将此更改为您的DB AND pid <> pg_backend_pid();

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

如果在IntelliJ中遇到此错误,请确保通过单击下面所示的按钮关闭所有窗口中的连接

我找到了这个问题的解决方案,尝试在终端运行这个命令

ps -ef | grep postgres

使用此命令终止进程

sudo kill -9 PID

每当我尝试删除数据库时,我得到:

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

首先你需要撤销

REVOKE CONNECT ON DATABASE TARGET_DB FROM public;

然后使用:

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

它肯定会起作用。