To jest ogólna odpowiedź, a nie specyficzna dla heroku. Ogólnie rzecz biorąc, anulowanie zapytania może wymagać, aby użytkownik miał dostęp superużytkownika do serwera postgres lub do bazy danych postgres - wygląda na to, że zwykły użytkownik nie może zabić swojego własnego procesu zapytania bez pytania administratora lub administratora systemu o pomoc
Znajdź PID uruchamiając ten sql:
SELECT procpid,* from pg_stat_activity
WHERE current_query<>'<IDLE>' ORDER BY xact_start;
cenie znajdziesz procpid w pierwszej kolumnie (po lewej), a pierwszy (górny) rząd będzie prawdopodobnie kwerendy you” Chciałbym zakończyć. Założę się, że pid ma wartość 1234 poniżej.
można anulować poprzez zapytanie SQL (czyli bez dostępu do powłoki, ale prawdopodobnie trzeba administratora dostęp do bazy danych):
select pg_cancel_backend(1234);
To jest „miękki” sposób ... zapytanie nie będzie znika natychmiast. Jeśli jesteś w pośpiechu, spróbuj tego:
select pg_terminate_backend(1234);
Jeśli masz dostęp do powłoki można też zrobić to z powłoki:
kill -INT 1234
Jeśli to nie pomoże, użyj:
kill 1234
nie:
kill -9 1234
... to często powoduje, że cały serwer Postgresu płonie w płomieniach, a następnie możesz ponownie uruchomić PostgreSQL. PostgreSQL jest dość mocny, więc dane nie zostaną uszkodzone, ale polecam przed użyciem „kill -9” w każdym razie ;-)
„bezczynności w transakcji” oznacza, że transakcja nie była zakończone "zatwierdzeniem" lub "wycofaniem", co oznacza, że aplikacja jest błędna lub niewłaściwie zaprojektowana do pracy z transakcyjnymi bazami danych. Należy unikać długotrwałej "nieaktywności transakcji", ponieważ może to również spowodować poważne problemy z wydajnością.
Może pytanie należy przeformułować „jak mam zakończyć moje własne zapytanie, kiedy nie ma ani korzenia dostęp do serwera PostgreSQL ani superużytkownika dostępu do bazy danych”. Wydaje się, że jest to bardzo dobre pytanie ... i nie znam odpowiedzi. – tobixen