PG_CANCEL_BACKEND
取消查询。PG_CANCEL_BACKEND 的功能等效于 CANCEL 命令。您可取消当前由您的用户运行的查询。超级用户可取消任何查询。
语法
pg_cancel_backend( pid )
参数
- pid
-
要取消的查询的进程 ID (PID)。您不能通过指定查询 ID 来取消查询;您必须指定查询的进程 ID。需要
INTEGER
值。
返回类型
无
使用说明
如果多个会话中的查询在同一个表上保持锁定状态,您可以使用 PG_TERMINATE_BACKEND 函数终止其中一个会话,这将强制所终止会话中所有当前运行的事务释放锁定并回滚事务。查询 PG__LOCKS 目录表以查看当前持有的锁。如果某个查询由于位于事务块 (BEGIN … END) 中而无法取消,您可使用 PG_TERMINATE_BACKEND 函数终止在其中运行该查询的会话。
示例
要取消当前正在运行的查询,请先检索要取消的查询的进程 ID。要确定所有当前正在运行的查询的进程 ID,请运行以下命令。
SELECT pid, TRIM(starttime) AS start, duration, TRIM(user_name) AS user, SUBSTRING(query,1,40) AS querytxt FROM stv_recents WHERE status = 'Running';
+-----+------------------------+----------+--------+-----------------------------+ | pid | starttime | duration | user | querytxt | +-----+------------------------+----------+--------+-----------------------------+ | 802 | 2013-10-14 09:19:03.55 | 132 | dwuser | select venuename from venue | | 834 | 2013-10-14 08:33:49.47 | 1250414 | dwuser | select * from listing; | | 964 | 2013-10-14 08:30:43.29 | 326179 | dwuser | select sellerid from sales | +-----+------------------------+----------+--------+-----------------------------+
要取消进程 ID 为 802 的查询,请使用以下示例。
SELECT PG_CANCEL_BACKEND(802);