Postgresql – 由于某些自动连接到数据库而无法删除数据库

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

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

当II使用时:

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

我似乎从该数据库中删除连接。 但是,如果我尝试删除数据库后,不知何故有人自动连接到该数据库,并给出这个错误。 有什么可以做的呢? 没有人使用这个数据库,除了我。

您可以阻止未来的连接:

 REVOKE CONNECT ON DATABASE thedb FROM public; 

(可能还有其他用户/angular色;请参阅psql \l+

你可以终止所有的连接到这个数据库,除了你自己的:

 SELECT pid, pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = current_database() AND pid <> pg_backend_pid(); 

在旧版本的pid被称为procpid所以你将不得不处理。

既然您已经撤消了CONNECT权限,那么无论是否尝试自动连接都不应该再这样做。

您现在可以删除数据库。

如果您正在使用超级用户连接进行正常操作,这将不起作用,但是如果您正在这样做,则需要先解决该问题。

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

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

它一定会工作。

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

 select * from pg_stat_activity where datname = 'TARGET_DB'; 

也许这是你的联系?

如果没有潜在的影响你的机器上的其他服务,只是service postgresql restart

我发现这个问题的解决scheme尝试在terminal中运行此命令

 ps -ef | grep postgres 

通过这个命令杀死进程

 sudo kill -9 PID