CANCEL
取消当前正在运行的数据库查询。
CANCEL 命令需要正在运行的查询的进程 ID,并显示一条确认消息来验证查询已取消。
语法
CANCEL process_id [ 'message' ]
参数
- process_id
-
对应于您要取消的查询的进程 ID。
- '消息'
-
一条可选的确认消息,该消息在查询取消操作完成时显示。如果您不指定消息,Amazon Redshift 将显示默认的确认消息。您必须将消息放在单引号内。
使用说明
您不能通过指定查询 ID 来取消查询;您必须指定查询的进程 ID (PID)。您只能取消当前由您的用户运行的查询。超级用户可以取消所有查询。
如果多个会话中的查询在同一个表上保持锁定状态,您可以使用 PG_TERMINATE_BACKEND 函数终止其中一个会话,这将强制所终止会话中所有当前运行的事务释放锁定并回滚事务。查询 STV_LOCKS 系统表可查看当前保留的锁定。
在特定的内部事件之后,Amazon Redshift 可能会重新启动一个活动会话并分配新的 PID。如果 PID 已发生更改,您可能会收到以下错误消息:
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
要查找新的 PID,请查询 STL_RESTARTED_SESSIONS 系统表并针对 oldpid
列进行筛选。
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
示例
要取消当前正在运行的查询,请先检索要取消的查询的进程 ID。要确定所有当前正在运行的查询的处理 ID,请键入以下命令:
select pid, starttime, duration, trim(user_name) as user, trim (query) as querytxt from stv_recents where status = 'Running'; pid | starttime | duration | user | querytxt -----+----------------------------+----------+----------+----------------- 802 | 2008-10-14 09:19:03.550885 | 132 | dwuser | select venuename from venue where venuestate='FL', where venuecity not in ('Miami' , 'Orlando'); 834 | 2008-10-14 08:33:49.473585 | 1250414 | dwuser | select * from listing; 964 | 2008-10-14 08:30:43.290527 | 326179 | dwuser | select sellerid from sales where qtysold in (8, 10);
检查查询文本,确定哪个进程 ID (PID) 对应于您要取消的查询。
键入以下命令以使用 PID 802 来取消该查询:
cancel 802;
运行查询的会话会显示如下消息:
ERROR: Query (168) cancelled on user's request
其中 168
是查询 ID (而不是用于取消查询的进程 ID)。
或者,您可以指定显示一条自定义消息,而不是默认消息。要指定自定义消息,请将消息使用引号包含在 CANCEL 命令的结尾:
cancel 802 'Long-running query';
运行查询的会话会显示如下消息:
ERROR: Long-running query