【问题解决】postgresql操作数据库时候,提示有N个会话正在使用数据库的解决方案

项目场景:

当你尝试执行以下命令时:

sql 复制代码
ALTER DATABASE target_db RENAME TO new_name;
-- 或
DROP DATABASE target_db;

PostgreSQL 会返回类似错误:

clike 复制代码
ERROR:  database "target_db" is being accessed by other users
DETAIL:  There are 3 other sessions using the database.

这是因为当前有活动连接正在使用该数据库,PostgreSQL为了保证数据一致性,禁止在此状态下进行修改或删除操作。

解决方案:

1、查看哪些会话正在连接目标数据库。

2、逐个终止这些会话(排除当前自己的会话)。

3、重新执行重命名或删除操作。

第一步:查询当前使用该数据库的会话

连接到任意其他数据库(如 postgres 或 template1),然后执行以下查询:

sql 复制代码
SELECT 
    pid,
    usename AS username,
    application_name,
    client_addr AS client_ip,
    backend_start AS connection_start_time,
    state AS connection_state
FROM 
    pg_stat_activity
WHERE 
    datname = 'target_db';

返回:

💡 说明:

  • pid 是进程ID,用于后续终止会话。
  • client_ip 为 连接会话的ip。
  • state 为 idle 可被终止,active终止需要慎重。但是注意不要终止当前连接会话。

第二步:终止所有连接到该数据库的会话

使用 pg_terminate_backend() 函数批量终止会话,注意排除当前会话自身(否则报错)。

sql 复制代码
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'target_db'
AND pid <> pg_backend_pid();   -- pid为上一步查询的进程ID

执行后,返回结果为 t 的行表示成功终止。

逐个将pid进行终止。

验证: 再次执行第一步的查询,该pid对应的记录应该已经消失(终止会话)。

第三步:执行数据库重命名或删除操作,或者你的目标操作

此时操作应成功执行,不再报错。

通过 pg_stat_activity 定位会话 + pg_terminate_backend() 强制清理,解决 PostgreSQL 数据库重命名/删除时"被其他会话占用"的问题。此方法同样适用于修改数据库参数(如 ALTER DATABASE SET)等需要独占访问的场景。
友情提示: 本文所述操作会立即中断数据库连接,请务必备份重要数据并在测试环境验证后再用于生产库。

相关推荐
zyplayer-doc几秒前
研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库
大数据·数据库·人工智能·笔记·pdf·ocr
NineData几秒前
Oracle 卡住时先看阻塞源,ChatDBA 会先把锁链路理出来
数据库·oracle·ninedata·锁故障·锁等待·chatdba·锁阻塞
Macbethad14 分钟前
基于WPF与.NET的洁净厂房数据孪生平台技术方案:架构、实现与SEMI标准实践
数据库·系统架构
咏方舟【长江支流】34 分钟前
【开源】跨语言·跨平台·跨数据库(6) ——一种ORM缓存的接口实现和容错处理
数据库·缓存·开源·咏方舟-长江支流·用宝框架
努力进修44 分钟前
破除工业 AI 业务落地壁垒:多模时序融合架构重塑设备全维度数据价值
数据库·人工智能·架构
静水楼台x1 小时前
spring security
java·数据库·spring
深度研习笔记1 小时前
OpenCV工业视觉进阶14|SQLite违规数据库存储+历史记录查询+Excel报表导出,完成项目商用数据闭环(验收必备)
数据库·opencv·sqlite
要开心吖ZSH3 小时前
一文搞懂:JDK 21 虚拟线程 vs N种异步方案,到底该怎么选?
java·数据库·jdk·虚拟线程
guodingdingh8 小时前
软件开发工作问题总结0718
java·开发语言·数据库
GuWenyue10 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能