CANCEL - Amazon Redshift

CANCEL

Cancels a database query that is currently running.

The CANCEL command requires the process ID or session ID of the running query and displays a confirmation message to verify that the query was canceled.

Required privileges

Following are required privileges for CANCEL:

  • Superuser canceling their own query

  • Superuser canceling a user's query

  • Users with the CANCEL privilege canceling a user's query

  • User canceling their own query

Syntax

CANCEL process_id [ 'message' ]

Parameters

process_id

To cancel a query running in an Amazon Redshift cluster, use the pid (Process ID) from STV_RECENTS that corresponds to the query that you want to cancel.

To cancel a query running in an Amazon Redshift Serverless workgroup, use the session_id from SYS_QUERY_HISTORY that corresponds to the query that you want to cancel.

'message'

An optional confirmation message that displays when the query cancellation completes. If you don't specify a message, Amazon Redshift displays the default message as verification. You must enclose the message in single quotation marks.

Usage notes

You can't cancel a query by specifying a query ID; you must specify the query's process ID (PID) or Session ID. You can only cancel queries currently being run by your user. Superusers can cancel all queries.

If queries in multiple sessions hold locks on the same table, you can use the PG_TERMINATE_BACKEND function to terminate one of the sessions. Doing this forces any currently running transactions in the terminated session to release all locks and roll back the transaction. To view currently held locks, query the STV_LOCKS system table.

Following certain internal events, Amazon Redshift might restart an active session and assign a new PID. If the PID has changed, you might receive the following error message.

Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.

To find the new PID, query the STL_RESTARTED_SESSIONS system table and filter on the oldpid column.

select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;

Examples

To cancel a currently running query in a Amazon Redshift cluster, first retrieve the process ID for the query that you want to cancel. To determine the process IDs for all currently running queries, type the following command:

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);

Check the query text to determine which process id (PID) corresponds to the query that you want to cancel.

Type the following command to use PID 802 to cancel that query:

cancel 802;

The session where the query was running displays the following message:

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

where 168 is the query ID (not the process ID used to cancel the query).

Alternatively, you can specify a custom confirmation message to display instead of the default message. To specify a custom message, include your message in single quotation marks at the end of the CANCEL command:

cancel 802 'Long-running query';

The session where the query was running displays the following message:

ERROR: Long-running query