PG_CANCEL_BACKEND
取消查询。PG_CANCEL_BACKEND 的功能等效于 CANCEL 命令。您可取消当前由您的用户运行的查询。超级用户可取消任何查询。
语法
pg_cancel_backend( pid )
Arguments
- pid
-
要取消的查询的进程 ID (PID)。您不能通过指定查询 ID 来取消查询;您必须指定查询的进程 ID。需要一个整数值。
返回类型
无
使用说明
如果多个会话中的查询在同一个表上保持锁定状态,您可以使用 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);