Detta är ett allmänt Postgres-svar och inte specifikt för heroku
(Det enkla-dumma svaret på denna fråga kan vara ... starta om postgresql. Förutsatt att det inte är önskvärt eller inte ett alternativ ...)
Hitta PID genom att köra denna sql:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(Frågan kan behöva lagas beroende på versionen av postgres - så småningom, välj bara * från pg_stat_activity). Du hittar pid i den första (vänstra) kolumnen, och den första (översta) raden är sannolikt den fråga du vill avsluta. Jag antar att pid är 1234 nedan.
Du kan avbryta en fråga via SQL (dvs utan skal-åtkomst) så länge den är din eller du har superanvändaråtkomst:
select pg_cancel_backend(1234);
Det är en "vänlig" begäran att avbryta 1234-frågan, och med lite tur försvinner den efter ett tag. Så småningom blir detta mer effektivt:
select pg_terminate_backend(1234);
Om du har skalåtkomst och root- eller postgres-behörigheter kan du också göra det från skalet. För att "avbryta" kan man göra:
kill -INT 1234
och för att "avsluta", helt enkelt:
kill 1234
GÖR INTE:
kill -9 1234
... som ofta resulterar i att hela postgres-servern går ner i lågor, då kan du lika gärna starta om postgres. Postgres är ganska robust, så data kommer inte att skadas, men jag skulle rekommendera att inte använda "kill -9" i alla fall :-)
En långvarig "tomgång i transaktion" innebär ofta att transaktionen inte avslutades med en "commit" eller en "återställning", vilket betyder att applikationen är buggig eller inte korrekt utformad för att fungera med transaktionsdatabaser. Långvarig "tomgång i transaktion" bör undvikas, eftersom det också kan orsaka stora prestandaproblem.