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