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

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

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


当前回答

如果对机器上的其他服务没有潜在影响,只需重启postgresql服务

其他回答

如果您正在使用docker运行postgresql服务器,请重新启动容器。

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

ps -ef | grep postgres

使用此命令终止进程

sudo kill -9 PID

第一:

sudo systemctl restart postgresql

然后:

drop database DATABASE_NAME;

REVOKE CONNECT将不阻止来自db所有者或超级用户的连接。因此,如果您不希望任何人连接db, follow命令可能会有用。

alter database pilot allow_connections = off;

然后使用:

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

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

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

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

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

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

在我的例子中是问题