CANCEL
現在実行中のデータベースクエリをキャンセルします。
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 関数を使用してセッションの 1 つを終了できます。これを行うと、終了したセッションで現在実行されているトランザクションがすべてのロックを解除し、トランザクションがロールバックされます。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