Bu genel bir Postgres cevabıdır ve heroku'ya özgü değildir
(Bu sorunun basit-aptalca cevabı ... sadece postgresql'i yeniden başlatmak olabilir. Bunun istenmediğini veya bir seçenek olmadığını varsayarsak ...)
Bu sql'yi çalıştırarak PID'yi bulun:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(Sorgunun postgres sürümüne bağlı olarak onarılması gerekebilir - sonunda, pg_stat_activity'den * öğesini seçin). Pid'i ilk (sol) sütunda bulacaksınız ve ilk (üst) satır büyük olasılıkla sonlandırmak istediğiniz sorgu olacaktır. Aşağıdaki pid'in 1234 olduğunu varsayacağım.
Size ait olduğu veya süper kullanıcı erişiminiz olduğu sürece SQL aracılığıyla bir sorguyu iptal edebilirsiniz (yani kabuk erişimi olmadan):
select pg_cancel_backend(1234);
Bu, 1234 sorgusunu iptal etmek için "dostça" bir istek ve biraz şansla bir süre sonra kaybolacak. Sonuç olarak, bu daha etkilidir:
select pg_terminate_backend(1234);
Kabuk erişiminiz ve kök veya postgres izinleriniz varsa, bunu kabuktan da yapabilirsiniz. "İptal etmek" için şunları yapabilirsiniz:
kill -INT 1234
ve "sonlandırmak" için basitçe:
kill 1234
YAPMA:
kill -9 1234
... bu genellikle tüm postgres sunucusunun alevler içinde kalmasıyla sonuçlanır, o zaman postgres'i yeniden başlatabilirsiniz. Postgres oldukça sağlamdır, bu nedenle veriler bozulmaz, ancak her durumda "kill -9" kullanılmamasını öneririm :-)
Uzun süreli "işlemde boşta kalma", genellikle işlemin bir "kesinleştirme" veya "geri alma" ile sonlandırılmadığı anlamına gelir; bu, uygulamanın hatalı olduğu veya işlem veritabanları ile çalışmak üzere uygun şekilde tasarlanmadığı anlamına gelir. Büyük performans sorunlarına da yol açabileceğinden, uzun süreli "boşta kalma" işleminden kaçınılmalıdır.