To jest ogólna odpowiedź Postgresa, a nie tylko heroku
(Prosta i głupia odpowiedź na to pytanie może brzmieć... po prostu uruchom ponownie postgresql. Zakładając, że nie jest to pożądane lub nie jest opcją...)
Znajdź PID, uruchamiając ten sql:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(Zapytanie może wymagać naprawy w zależności od wersji postgresa - ewentualnie wystarczy wybrać * z pg_stat_activity). Numer PID znajduje się w pierwszej (lewej) kolumnie, a pierwszy (górny) wiersz prawdopodobnie zawiera zapytanie, które chcesz zakończyć. Zakładam, że pid to 1234 poniżej.
Możesz anulować zapytanie przez SQL (tj. bez dostępu do powłoki), o ile jest twoje lub masz dostęp superużytkownika:
select pg_cancel_backend(1234);
To "przyjazna" prośba o anulowanie zapytania 1234 i przy odrobinie szczęścia zniknie po chwili. Ostatecznie jest to bardziej wydajne:
select pg_terminate_backend(1234);
Jeśli masz dostęp do powłoki i uprawnienia roota lub postgres, możesz to zrobić również z powłoki. Aby "anulować" można:
kill -INT 1234
i "zakończyć", po prostu:
kill 1234
NIE:
kill -9 1234
... co często spowoduje, że cały serwer postgres stanie w płomieniach, możesz równie dobrze zrestartować postgres. Postgres jest dość solidny, więc dane nie zostaną uszkodzone, ale w każdym razie odradzałbym używanie "kill -9" :-)
Długotrwałe „bezczynność w transakcji” często oznacza, że transakcja nie została zakończona przez „commit” lub „cofnięcie”, co oznacza, że aplikacja zawiera błędy lub nie została właściwie zaprojektowana do pracy z transakcyjnymi bazami danych. Należy unikać długotrwałego „bezczynności w transakcji”, ponieważ może to również powodować poważne problemy z wydajnością.