PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zakończ zawieszone zapytanie (bezczynne w transakcji)

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ą.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można WSTAWIĆ:BŁĄD:wartość tablicy musi zaczynać się od { lub informacji o wymiarze

  2. Postgresql json jak zapytanie

  3. brak wpisu pg_hba.conf dla hosta

  4. Błąd podczas tworzenia przestrzennej bazy danych. BŁĄD:nie można załadować biblioteki /usr/pgsql-9.1/lib/rtpostgis-2.0.so

  5. Na co zwrócić uwagę, jeśli Twoja replikacja PostgreSQL jest opóźniona