postgresql删除数据库,提示有session正在连接

问题

env

  • postgresql17
  • navicat

提示日志

ERROR: database 'xXx' is being accessed by other users
DETAIL: There are 5 other sessions using the database.

分析

  • 可能当前仍有session正在连接数据库,或者有session在不停地连接该数据库,故删除数据库失败

  • 需要查看数据库中的session,检查是否仍有session在连接,如果有,排查连接数据库的机器,停止连接后再删除数据库。

解决

1.断开所有连接

1
2
3
4
5
6
7
select
pg_terminate_backend(pg_stat_activity.pid)
from
pg_stat_activity
where
datname = '数据库'
and pid <> pg_backend_pid();

查找到活跃进程,自动kill

2. 查找相关连接数据库的主机信息

如果有程序会不停的连的话只能把连的程序停了才能删除

1
2
3
4
5
6
select
*
from
pg_stat_activity
where
datname = '数据库';

3. 再次删除库及库对应用户

1
2
drop database dbxxx;
drop user xxx;