Postgresql管理-杀会话还是取消会话?

在 PostgreSQL 中,终止数据库连接主要有两个函数,它们的"杀伤力"不同,适用于不同场景。

核心操作分为两步:

  1. 从 pg_stat_activity 视图中找到需要终止连接的进程ID (pid)。

  2. 使用 pg_terminate_backend(pid) 或 pg_cancel_backend(pid) 函数来终止。

🎯 两种终止方式:取消 vs 终止

在动手之前,了解这两个函数的区别至关重要,这能帮你避免不必要的服务中断。

函数 作用 比喻 适用场景

pg_cancel_backend(pid) 取消当前正在执行的查询,但保持连接。 拍拍正在打电话的人,让他先挂掉这通电话,但电话线还连着。 只想停止一个耗时的、跑错的SQL查询,但希望应用连接不断开,可以立即执行下一个任务。

pg_terminate_backend(pid) 强制终止整个连接和会话。 直接拔掉电话线,连人带座一起请出去。 连接已经僵死、应用异常导致连接泄漏、或者需要立即释放连接资源时。

建议: 优先尝试使用 pg_cancel_backend,如果无效或目标就是断开连接,再使用 pg_terminate_backend。

🔍 第一步:查找目标连接

你需要查询 pg_stat_activity 系统视图来获取所有活动连接的信息。下面是一个实用的查询语句,可以帮助你快速定位问题连接:

SELECT

pid, -- 进程ID,这是终止连接的关键

usename, -- 数据库用户名

datname, -- 数据库名

client_addr, -- 客户端IP地址

application_name, -- 应用名称,非常有用

state, -- 状态:active(活动中), idle(空闲)等

wait_event_type, -- 等待事件类型,如 Lock(锁)

wait_event, -- 等待事件,具体在等什么

now() - query_start AS query_duration, -- 查询已执行时长

left(query, 100) AS current_query -- 当前SQL(截取前100字符)

FROM pg_stat_activity

WHERE state != 'idle' -- 过滤掉空闲连接

AND pid pg_backend_pid(); -- 排除掉你当前这个查询会话

常用筛选条件

你可以根据具体情况,在 WHERE 子句中添加条件来精确定位:

* 按数据库名筛选: WHERE datname = 'your_db_name'

* 按用户名筛选: WHERE usename = 'your_username'

* 查找长时间运行的查询: WHERE state = 'active' AND query_start 替换为上一步查到的具体数字。

-- 方式一:取消查询

SELECT pg_cancel_backend();

-- 方式二:终止连接

SELECT pg_terminate_backend();

2. 批量终止连接

你可以直接将查询和终止函数结合,批量处理符合条件的连接。例如,终止连接到 mydb 数据库且空闲超过1小时的所有连接:

SELECT pg_terminate_backend(pid)

FROM pg_stat_activity

WHERE datname = 'mydb'

AND state = 'idle'

AND query_start 命令强制杀死进程,但这非常危险,可能导致锁残留或数据问题,应极度谨慎使用。

相关推荐
TDengine (老段)23 分钟前
TDengine 压缩编码机制 — 双层压缩架构与类型特化算法
大数据·数据库·物联网·算法·时序数据库·tdengine·涛思数据
苏渡苇2 小时前
Redis 持久化——RDB 快照 vs AOF 日志
数据库·redis·缓存·redis持久化·aof vs rdb
l1t2 小时前
DeepSeek总结的使用 PEG 实现运行时可扩展的 SQL 解析器
数据库·sql
这个DBA有点耶2 小时前
COUNT进阶(续):超大表去重计数的极致优化
数据库·架构·代码规范
爱喝水的鱼丶2 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第四篇:SAP 报表异常处理机制:数据校验与消息提示规范落地
开发语言·数据库·学习·算法·sap·abap
_1_72 小时前
SQL SERVER闪退问题解决
数据库·sqlserver
ZengLiangYi2 小时前
sql.js WASM 深度解析
javascript·数据库·后端
一 乐3 小时前
人口老龄化社区服务与管理平台|基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·人口老龄化社区服务与管理平台
梓䈑3 小时前
【MySQL】表的操作(数据表的创建、查看 和 修改)
数据库·mysql
小碗羊肉3 小时前
【Redis | 第六篇】Redisson
数据库·redis·缓存