Cancela uma consulta. PG_CANCEL_BACKEND é funcionalmente equivalente ao comando CANCEL. Você pode cancelar consultas atualmente em execução pelo seu usuário. Superusuários podem cancelar qualquer consulta.
Sintaxe
pg_cancel_backend( pid )
Argumentos
- pid
-
O ID de processo (PID) da consulta a ser cancelada. Você não pode cancelar uma consulta especificando um ID de consulta; você deve especificar o ID de processo da consulta. Requer um valor
INTEGER
.
Tipo de retorno
Nenhum
Observações de uso
Se consultas em várias sessões têm bloqueios na mesma tabela, você pode usar a função PG_TERMINATE_BACKEND para encerrar uma das sessões, o que força todas as transações atualmente em execução na sessão encerrada a liberar todos os bloqueios e reverter a transação. Consulte a tabela de catálogo PG__LOCKS para visualizar os bloqueios atuais. Se você não puder cancelar uma consulta pois ela está em um bloco de transação (BEGIN… END), você pode encerrar a sessão na qual a consulta está em execução usando a função PG_TERMINATE_BACKEND.
Exemplos
Para cancelar uma consulta atualmente em execução, recupere primeiro o ID de processo para a consulta que você deseja cancelar. Para determinar os IDs de processo para todas as consultas em execução atualmente, execute o comando a seguir.
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 |
+-----+------------------------+----------+--------+-----------------------------+
Para cancelar a consulta com o ID de processo 802, use o exemplo a seguir.
SELECT PG_CANCEL_BACKEND(802);