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

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

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


当前回答

只需检查连接是什么,它来自哪里。你可以看到这些:

SELECT * FROM pg_stat_activity WHERE 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';

它肯定会起作用。

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

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

brew services restart postgresql

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

alter database pilot allow_connections = off;

然后使用:

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

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

root@kalilinux:~#sudo service postgresql restart

然后尝试删除数据库:

postgres=# drop database test_database;

这样就可以了。