Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Annulla una query del database attualmente in esecuzione.
Il comando CANCEL richiede l'ID di processo o l'ID di sessione della query in esecuzione e visualizza un messaggio di conferma per verificare che la query sia stata annullata.
Privilegi richiesti
Di seguito sono riportati i privilegi richiesti per CANCEL:
-
Utente con privilegi avanzati che annulla la propria query
-
Utente con privilegi avanzati che annulla la query di un utente
-
Utenti con il privilegio CANCEL che annulla la query di un utente
-
Utente che annulla la propria query
Sintassi
CANCEL process_id [ 'message' ]
Parametri
- process_id
-
Per annullare una query in esecuzione in un cluster Amazon Redshift, utilizza il
pid
(Process ID) corrispondente alla query che desideri annullare. STV_RECENTSPer annullare una query in esecuzione in un gruppo di lavoro Serverless Amazon Redshift, utilizza il
session_id
modulo SYS_QUERY_HISTORY corrispondente alla query che desideri annullare. - 'message'
-
Messaggio di conferma facoltativo che viene visualizzato al termine dell'annullamento della query. Se non si specifica un messaggio, Amazon Redshift visualizza il messaggio predefinito come verifica. È necessario racchiudere il messaggio tra virgolette singole.
Note per l'utilizzo
Non è possibile annullare una query specificando un ID di query; è necessario specificare l'ID di processo (PID) o l'ID di sessione della query. Puoi annullare solo le query attualmente eseguite dall'utente. Gli utenti con privilegi avanzati possono annullare tutte le query.
Se le query in più sessioni contengono blocchi sulla stessa tabella, è possibile utilizzare la funzione PG_TERMINATE_BACKEND per terminare una delle sessioni. Questa operazione forza qualsiasi transazione attualmente in esecuzione nella sessione terminata al fine di rilasciare tutti i blocchi ed eseguire il rollback della transazione. Per visualizzare i blocchi correnti, eseguire una query sulla tabella di sistema STV_LOCKS.
Seguendo determinati eventi interni, Amazon Redshift può riavviare una sessione attiva e assegnare un nuovo PID. Se il PID è cambiato, è possibile che venga ricevuto il seguente messaggio di errore:
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
Per trovare il nuovo PID, eseguire una query sulla tabella di sistema STL_RESTARTED_SESSIONS e filtrare la colonna oldpid
.
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
Esempi
Per annullare una query attualmente in esecuzione in un cluster Amazon Redshift, recupera innanzitutto l'ID del processo per la query che desideri annullare. Per determinare il processo IDs per tutte le query attualmente in esecuzione, digita il seguente 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);
Controlla il testo della query per determinare quale ID processo (PID) corrisponde alla query che vuoi annullare.
Digita il seguente comando per utilizzare PID 802 per annullare quella query:
cancel 802;
La sessione in cui è stata eseguita la query visualizza il seguente messaggio:
ERROR: Query (168) cancelled on user's request
dove 168
è l'ID query (non l'ID processo utilizzato per annullare la query).
In alternativa, puoi specificare un messaggio di conferma personalizzato da visualizzare al posto del messaggio predefinito. Per specificare un messaggio personalizzato, includi il messaggio tra virgolette singole alla fine del comando CANCEL:
cancel 802 'Long-running query';
La sessione in cui è stata eseguita la query visualizza il seguente messaggio:
ERROR: Long-running query