更新时间:2025-05-29 GMT+08:00

ALTER SYSTEM KILL SESSION

功能描述

ALTER SYSTEM KILL SESSION命令用于结束一个会话。

语法格式

ALTER SYSTEM KILL SESSION 'pid, sessionid' [ IMMEDIATE ];

参数说明

  • pid, sessionid

    会话的PID和SESSIONID(获取方法请参考示例)。可通过pg_stat_activity系统表配合查询当前活跃线程(可见示例),但执行ALTER SYSTEM KILL SESSION命令时线程可能已结束。

    取值范围:通过查看系统表pg_stat_activity可查看所有会话的PID和SESSIONID。在非线程池模式下PID和SESSIONID通常为相同值。

  • IMMEDIATE

    表明会话将在命令执行后立即结束。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
--开启两个会话,在第一个会话中建表并开启事务插入数据。
gaussdb=# CREATE TABLE tbl_test(id int);
gaussdb=# BEGIN;
gaussdb=# INSERT INTO tbl_test VALUES (1);

--在第二个会话中查询会话信息。state为“idle in transaction”表示事务等待提交。
gaussdb=# SELECT datname,
       usename,
       pid,
       sessionid,
       state 
FROM pg_stat_activity
WHERE query LIKE 'INSERT INTO tbl_test%';
 datname  | usename |       pid       | sessionid |        state        
----------+---------+-----------------+-----------+---------------------
 postgres | omm     | 139802072635136 |       143 | idle in transaction
(1 row)

--结束会话,不带IMMEDIATE参数,将会强制结束会话,该会话中的事务也会被强制结束。
gaussdb=# ALTER SYSTEM KILL SESSION '139802072635136,143';
 pg_terminate_session 
----------------------
 t
(1 row)

--重新连接,查询表tbl_test的数据会发现事务被强制结束后数据回滚。
gaussdb=# SELECT * FROM tbl_test;
 id 
----
(0 rows)

--删除表。
gaussdb=# DROP TABLE tbl_test;