CANCEL
Cancela uma consulta de banco de dados que está sendo executada no momento.
O comando CANCEL requer o ID do processo ou o ID da sessão da consulta que está sendo executada e exibe uma mensagem de confirmação para confirmar que a consulta foi cancelada.
Privilégios obrigatórios
A seguir estão os privilégios obrigatórios para CANCEL:
-
Superusuário que cancele sua própria consulta
-
Superusuário que cancele a consulta de um usuário
-
Usuários com o privilégio CANCEL que cancelem a consulta de um usuário
-
Usuário que cancele sua própria consulta
Sintaxe
CANCEL process_id [ 'message' ]
Parâmetros
- process_id
-
Para cancelar uma consulta em execução em um cluster do Amazon Redshift, use o
pid
(ID do processo) de STV_RECENTS que corresponde à consulta a ser cancelada.Para cancelar uma consulta em execução em um grupo de trabalho do Amazon Redshift sem servidor, use o
session_id
de SYS_QUERY_HISTORY que corresponde à consulta a ser cancelada. - 'mensagem'
-
Mensagem de confirmação opcional exibida quando o cancelamento da consulta é concluído. Se você não especificar uma mensagem, o Amazon Redshift exibirá a mensagem padrão como verificação. Você deve colocar a mensagem entre aspas simples.
Observações de uso
Não é possível cancelar uma consulta especificando um ID de consulta; é necessário especificar o ID de processo (PID) ou o ID da sessão da consulta. Somente é possível cancelar consultas atualmente em execução pelo seu usuário. Superusuários podem cancelar todas as consultas.
Se as consultas em várias sessões mantiverem bloqueios na mesma tabela, você poderá usar a função PG_TERMINATE_BACKEND para encerrar uma das sessões. Isso força todas as transações em execução na sessão encerrada a liberar todos os bloqueios e reverter a transação. Consulte a tabela de sistema STV_LOCKS para exibir os bloqueios atuais.
Depois de alguns eventos internos, o Amazon Redshift pode reiniciar uma sessão ativa e atribuir um novo PID. Se o PID foi alterado, a seguinte mensagem de erro pode aparecer.
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
Para encontrar o PID, consulte a tabela de sistema STL_RESTARTED_SESSIONS e o filtro na coluna oldpid
.
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
Exemplos
Para cancelar uma consulta em execução em um cluster do Amazon Redshift, recupere primeiro o ID de processo para a consulta a ser cancelada. Para determinar os IDs de processo para todas as consultas atualmente em execução, digite o seguinte comando:
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);
Verifique o texto da consulta para determinar qual ID de processo (PID) corresponde à consulta que você deseja cancelar.
Digite o seguinte comando a ser usado com o PID 802 para cancelar a consulta:
cancel 802;
A sessão em que a consulta estava sendo executada exibirá a seguinte mensagem:
ERROR: Query (168) cancelled on user's request
onde 168
é o ID de consulta (não o ID de processo usado para cancelar a consulta).
Como alternativa, você pode especificar uma mensagem de confirmação personalizada a ser exibida no lugar da mensagem padrão. Para especificar uma mensagem personalizada, inclua sua mensagem entre aspas simples no final do comando CANCEL:
cancel 802 'Long-running query';
A sessão em que a consulta estava sendo executada exibirá a seguinte mensagem:
ERROR: Long-running query