PG_CANCEL_BACKEND
クエリをキャンセルします。PG_CANCEL_BACKEND は、CANCELコマンドと機能的に同じものです。ユーザー自身が現在実行しているクエリをキャンセルできます。スーパーユーザーはどのクエリでもキャンセルできます。
構文
pg_cancel_backend( pid )
引数
- pid
-
キャンセルするクエリのプロセス ID (PID)。クエリ ID を指定してクエリをキャンセルすることはできません。クエリのプロセス ID を指定する必要があります。
INTEGER
値は必須です。
戻り型
なし
使用に関する注意事項
複数のセッションのクエリが同じテーブルのロックを保持している場合、PG_TERMINATE_BACKEND関数を使用してセッションの 1 つを終了することができます。これにより、終了したセッションで現在実行中のトランザクションがあれば、そのすべてのロックが強制的に解放され、トランザクションがロールバックされます。PG__LOCKS カタログテーブルに対してクエリを実行し、現在保持しているロックを表示します。トランザクションブロック (BEGIN … END) 内にあるためクエリをキャンセルできない場合、PG_TERMINATE_BACKEND 関数を使用して、クエリを実行中のセッションを終了できます。
例
現在実行されているクエリをキャンセルするには、キャンセルするクエリのプロセス ID を最初に取得します。現在実行されているすべてのクエリのプロセス ID を確認するには、次のコマンドを実行します。
SELECT pid, TRIM(starttime) AS start, duration, TRIM(user_name) AS user, SUBSTRING(query,1,40) AS querytxt FROM stv_recents WHERE status = 'Running';
+-----+------------------------+----------+--------+-----------------------------+ | pid | starttime | duration | user | querytxt | +-----+------------------------+----------+--------+-----------------------------+ | 802 | 2013-10-14 09:19:03.55 | 132 | dwuser | select venuename from venue | | 834 | 2013-10-14 08:33:49.47 | 1250414 | dwuser | select * from listing; | | 964 | 2013-10-14 08:30:43.29 | 326179 | dwuser | select sellerid from sales | +-----+------------------------+----------+--------+-----------------------------+
プロセス ID 802 のクエリをキャンセルするには、次の例を使用します。
SELECT PG_CANCEL_BACKEND(802);