删除数据库,提示有其它会话正在使用数据库。原因可能有以下两点
(1)服务启动,环境正在使用数据库。或者服务未完全停止,环境仍有进程在使用数据库。
(2)有其他用户正在连接数据库
如果服务处于启动状态,请先停止,再删除数据库。
如果确定服务已停止,删除数据库时,仍提示有其它会话正在使用数据库,可以通过以下方法停止其它会话的访问:
1、打开数据库相关工具(如DBeaver),连接目标数据库,并打开sql编辑器
2、运行以下sql命令,查询当前连接的会话:
SELECTpid,usename AS username,client_addr AS client_ip,backend_start AS connection_start_time,state AS connection_stateFROMpg_stat_activityWHEREdatname = '目标数据库';
说明:
-
pid:会话的进程 ID。
-
usename:连接用户的用户名。
-
client_addr:客户端的 IP 地址。
-
backend_start:连接的开始时间。
-
state:连接的状态(如 active、idle 等)。
3、在确定不会影响其他用户使用的情况下,可以通过执行以下sql命令,停止第2步中的会话进程:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '目标数据库' AND pid <> pg_backend_pid();
说明:
-
pg_terminate_backend(pid):终止指定进程 ID 的会话(“pid”替换为需要停止的会话进程ID)
-
pg_backend_pid():获取当前会话的进程 ID,以避免终止当前会话。
4、除当前会话外,其它会话均停止后,再删除数据库,此时可以成功删除数据库了。