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

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

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


当前回答

在我看来,有一些空闲的查询在后台运行。

首先尝试显示正在运行的查询

选择pid,年龄(clock_timestamp(), query_start),用户名,查询 从pg_stat_activity WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' ORDER BY query_start desc;

检查它们是否引用了有问题的数据库,或者您可以杀死所有它们或使用 Pid从选择结果)

选择pg_terminate_backend (procpid);

注意:终止一个选择查询不会造成任何不良影响

其他回答

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

brew services restart postgresql

Postgresql12

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

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

sudo service supervisor stop

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

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

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