Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

CANCEL

取消当前正在运行的数据库查询。

CANCEL 命令需要正在运行的查询的进程 ID,并显示一条确认消息来验证查询已取消。

语法

Copy
CANCEL process_id [ 'message' ]

参数

process_id

对应于您要取消的查询的进程 ID。

'消息'

一条可选的确认消息,该消息在查询取消操作完成时显示。如果您不指定消息,Amazon Redshift 将显示默认的确认消息。您必须将消息放在单引号内。

使用说明

您不能通过指定查询 ID 来取消查询;您必须指定查询的进程 ID (PID)。您只能取消当前由您的用户运行的查询。超级用户可以取消所有查询。

如果多个会话中的查询在同一个表上保持锁定状态,您可以使用 PG_TERMINATE_BACKEND 函数终止其中一个会话,这将强制所终止会话中所有当前运行的事务释放锁定并回滚事务。查询 STV_LOCKS 系统表可查看当前保留的锁定。

在发生特定内部事件之后,Amazon Redshift 可能会重新启动一个活动会话并分配新的 PID。如果 PID 已发生更改,您可能会收到以下错误消息:

Copy
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 列进行筛选。

Copy
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;

示例

要取消当前正在运行的查询,请先检索要取消的查询的进程 ID。要确定所有当前正在运行的查询的处理 ID,请键入以下命令:

Copy
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 来取消该查询:

Copy
cancel 802;

运行查询的会话会显示如下消息:

Copy
ERROR: Query (168) cancelled on user's request

其中 168 是查询 ID (而不是用于取消查询的进程 ID)。

或者,您可以指定显示一条自定义消息,而不是默认消息。要指定自定义消息,请将消息使用引号包含在 CANCEL 命令的结尾:

Copy
cancel 802 'Long-running query';

运行查询的会话会显示如下消息:

Copy
ERROR: Long-running query

本页内容: