PostgreSQL 解决“其他用户正在使用数据库”实操记录
日常操作 PostgreSQL 数据库时,经常会遇到“其他用户正在使用数据库”的提示,导致无法执行删除、恢复、修改数据库等关键操作。本次就以实际遇到的问题为例,记录完整的排查、解决过程,方便后续遇到同类问题快速复用。
一、问题场景
操作数据库 gsearthquakeresponse-test2 时,系统提示“其他用户正在使用数据库”,无法继续执行后续操作(如数据库恢复、删除等),需先释放占用的数据库连接。
二、排查过程:找到占用数据库的连接
首先需要明确,到底是哪个进程、哪个客户端在占用数据库连接。通过执行以下 SQL 语句,可查看目标数据库的所有活跃连接信息:
SELECT pid, usename, datname, application_name, client_addr, state, query
FROM pg_stat_activity
WHERE datname = 'gsearthquakeresponse-test2';
执行后,得到如下查询结果:
33704 postgres gsearthquakeresponse-test2 Navicat 192.168.1.143 active SELECT pid, usename, datname, application_name, client_addr, state, query
FROM pg_stat_activity
WHERE datname = 'gsearthquakeresponse-test2'
从结果中可清晰看出关键信息:
-
占用进程 PID:33704
-
数据库用户:postgres
-
客户端工具:Navicat(自己正在使用的客户端)
-
客户端IP:192.168.1.143
-
连接状态:active(活跃状态)
结论:本次占用数据库的是自己当前打开的 Navicat 连接,并非其他用户,只需终止该连接即可。
三、解决步骤:终止占用连接
找到占用连接的 PID(33704)后,执行以下 SQL 语句,强制终止该连接:
SELECT pg_terminate_backend(33704);
关键报错解读
执行上述命令后,系统提示如下“致命错误”,很多人会误以为操作失败,实则是成功的标志:
致命错误: 由于管理员命令中断联接
时间: 0.015s
解读:该报错表示“连接已被管理员命令强制中断”,即目标占用连接已成功终止,数据库不再被占用。
四、后续操作
连接终止后,无需额外操作,直接回到原本的需求场景(删除数据库、pg_restore 恢复数据、修改数据库配置等),即可正常执行,不会再提示“其他用户正在使用数据库”。
五、补充说明(实用扩展)
若排查后发现是多个连接占用,或需要批量终止所有外部连接,可使用以下命令(替换目标数据库名即可):
-- 批量终止 gsearthquakeresponse-test2 数据库的所有外部连接(排除当前连接)
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'gsearthquakeresponse-test2'
AND pid <> pg_backend_pid();
若需做数据库恢复、迁移等操作,担心操作过程中有人重新连接占用,可先禁止新连接,操作完成后再恢复:
-- 1. 禁止新连接进入目标数据库
UPDATE pg_database SET datallowconn = false WHERE datname = 'gsearthquakeresponse-test2';
-- 2. 终止所有已存在的连接
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'gsearthquakeresponse-test2'
AND pid <> pg_backend_pid();
-- 3. 操作完成后,恢复正常连接权限
UPDATE pg_database SET datallowconn = true WHERE datname = 'gsearthquakeresponse-test2';
六、总结
遇到 PostgreSQL “其他用户正在使用数据库”的问题,核心是找到占用连接的 PID 并终止,无需复杂操作:
-
用 pg_stat_activity 视图排查占用连接,获取 PID;
-
用 pg_terminate_backend(PID) 终止对应连接;
-
“致命错误: 由于管理员命令中断联接”是正常报错,代表连接终止成功。
本次问题虽为自己的 Navicat 连接占用,但排查逻辑适用于所有同类场景,记录下来,下次遇到可直接套用命令,提高效率。
浙公网安备 33010602011771号