本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
取消目前正在執行的資料庫查詢。
CANCEL 命令需要執行中查詢的程序 ID 或工作階段 ID,並顯示確認訊息以確認查詢已取消。
所需權限
以下是 CANCEL 所需的權限:
-
超級使用者取消自己的查詢
-
超級使用者取消使用者的查詢
-
具有 CANCEL 權限的使用者取消使用者的查詢
-
使用者取消自己的查詢
語法
CANCEL process_id [ 'message' ]
參數
- process_id
-
若要取消在 Amazon Redshift 叢集中執行的查詢,請使用STV_RECENTS對應至您要取消之查詢的
pid
(程序 ID)。若要取消在 Amazon Redshift Serverless 工作群組中執行的查詢,請使用SYS_QUERY_HISTORY對應至您要取消之查詢的
session_id
。 - 'message'
-
選用的確認訊息,會在查詢取消完成時顯示。如果您未指定訊息,Amazon Redshift 會顯示預設訊息進行驗證。您必須將訊息用單引號括住。
使用須知
您無法透過指定查詢 ID 來取消查詢;您必須指定查詢的處理程序 ID (PID) 或工作階段 ID。您只能取消目前由您的使用者執行的查詢。超級使用者可以取消所有查詢。
如果多個工作階段中的查詢在同一個資料表上保留鎖定,您可以使用 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;
範例
若要取消 Amazon Redshift 叢集中目前正在執行的查詢,請先擷取您要取消之查詢的程序 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