取消 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

取消

取消目前正在執行的資料庫查詢。

CANCEL 命令需要執行中查詢的處理程序 ID,並顯示確認訊息以確認查詢已取消。

必要的權限

以下是取消所需的權限:

  • 超級用户取消自己的查詢

  • 超級用户取消用户的查詢

  • 具有取消用户查詢的取消權限的用户

  • 用户取消自己的查詢

Syntax (語法)

CANCEL process_id [ 'message' ]

參數

process_id

此處理程序 ID 對應到您要取消的查詢。

'message'

選用的確認訊息,會在查詢取消完成時顯示。如果您未指定訊息,則 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