PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Прекратяване на спряна заявка (неактивна в транзакция)

Това е общ отговор на Postgres, а не специфичен за heroku

(Простият-глупавият отговор на този въпрос може да бъде ... просто рестартирайте postgresql. Ако приемем, че това не е желателно или не е опция ...)

Намерете PID, като стартирате този sql:

SELECT pid , query, * from pg_stat_activity
  WHERE state != 'idle' ORDER BY xact_start;

(Заявката може да се нуждае от поправка в зависимост от версията на postgres - в крайна сметка просто изберете * от pg_stat_activity). Ще намерите pid в първата (лява) колона, а първият (горен) ред вероятно ще бъде заявката, която искате да прекратите. Предполагам, че pid е 1234 по-долу.

Можете да отмените заявка чрез SQL (т.е. без достъп до shell), стига да е ваша или да имате супер потребителски достъп:

select pg_cancel_backend(1234);

Това е "приятелска" заявка за отмяна на заявката 1234 и с малко късмет тя ще изчезне след известно време. В крайна сметка това е по-ефективно:

select pg_terminate_backend(1234);

Ако имате достъп до shell и root или postgres разрешения, можете да го направите и от shell. За да "отмените" можете да направите:

kill -INT 1234

и за да "прекратите", просто:

kill 1234

НЕ:

kill -9 1234

... което често води до изгаряне на целия postgres сървър, тогава можете също да рестартирате postgres. Postgres е доста стабилен, така че данните няма да бъдат повредени, но бих препоръчал да не използвате "kill -9" във всеки случай :-)

Дългосрочно „неактивност в транзакцията“ често означава, че транзакцията не е била прекратена с „комит“ или „отмяна“, което означава, че приложението е с грешки или не е правилно проектирано да работи с транзакционни бази данни. Трябва да се избягва дълготрайното „неактивност в транзакцията“, тъй като също може да причини големи проблеми с производителността.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Връщане като масив от JSON обекти в SQL (Postgres)

  2. Ръководство за Pgpool за PostgreSQL:Част първа

  3. Автономна транзакция в PostgreSQL 9.1

  4. Как date_part() работи в PostgreSQL

  5. SQLAlchemy декларативно:дефиниране на тригери и индекси (Postgres 9)