Това е общ отговор на 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" във всеки случай :-)
Дългосрочно „неактивност в транзакцията“ често означава, че транзакцията не е била прекратена с „комит“ или „отмяна“, което означава, че приложението е с грешки или не е правилно проектирано да работи с транзакционни бази данни. Трябва да се избягва дълготрайното „неактивност в транзакцията“, тъй като също може да причини големи проблеми с производителността.