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

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

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


当前回答

Postgresql12

流行的回答对我没有帮助。

对我来说一个不明显的解决方案:如果使用kafka/rabbit,在DROP TABLE之前禁用管理器

sudo service supervisor stop

其他回答

对我来说,我只是重新启动postgresql。

systemctl restart postgresql

这意味着另一个用户正在访问数据库。简单地重启PostgreSQL。这个命令就可以了

root@kalilinux:~#sudo service postgresql restart

然后尝试删除数据库:

postgres=# drop database test_database;

这样就可以了。

这是我们在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>;

在macOS中尝试通过控制台使用以下命令重新启动postgresql数据库:

brew services restart postgresql

使用pgAdmin的GUI解决方案

首先启用显示活动在仪表板上,如果你没有:

File > Preferences > Dashboards > Display > Show Activity > true

现在禁用所有使用db的进程:

单击DB名称 单击“仪表盘>会话” 点击刷新图标 单击每个进程旁边的删除(x)图标结束它们

现在应该可以删除db了。