Questa è una risposta Postgres generale e non specifica per heroku
(La semplice-stupida risposta a questa domanda potrebbe essere ... riavvia semplicemente postgresql. Supponendo che non sia desiderabile o non sia un'opzione ...)
Trova il PID eseguendo questo sql:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(Potrebbe essere necessario riparare la query a seconda della versione di postgres - alla fine, basta selezionare * da pg_stat_activity). Troverai il pid nella prima colonna (a sinistra) e la prima riga (in alto) è probabilmente la query che desideri terminare. Presumo che il pid sia 1234 sotto.
Puoi annullare una query tramite SQL (ovvero senza accesso alla shell) fintanto che è tua o hai accesso come super utente:
select pg_cancel_backend(1234);
Questa è una richiesta "amichevole" per cancellare la query 1234, e con un po 'di fortuna scomparirà dopo un po'. Alla fine, questo è più efficiente:
select pg_terminate_backend(1234);
Se hai accesso alla shell e permessi di root o postgres puoi farlo anche dalla shell. Per "cancellare" si può fare:
kill -INT 1234
e per "terminare", semplicemente:
kill 1234
NON:
kill -9 1234
... questo spesso porterà l'intero server postgres ad andare in fiamme, quindi potresti anche riavviare postgres. Postgres è abbastanza robusto, quindi i dati non verranno danneggiati, ma in ogni caso sconsiglio di usare "kill -9" :-)
Un "inattività nella transazione" di lunga durata significa spesso che la transazione non è stata terminata con un "commit" o un "rollback", il che significa che l'applicazione è difettosa o non è progettata correttamente per funzionare con i database transazionali. Dovrebbe essere evitato "inattività nella transazione" di lunga durata, poiché può anche causare gravi problemi di prestazioni.