Esta é uma resposta geral do Postgres, e não específica para heroku
(A resposta simples e estúpida para esta pergunta pode ser ... apenas reinicie o postgresql. Supondo que isso não seja desejável ou não seja uma opção ...)
Encontre o PID executando este sql:
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(A consulta pode precisar de conserto dependendo da versão do postgres - eventualmente, basta selecionar * em pg_stat_activity). Você encontrará o pid na primeira coluna (à esquerda) e a primeira linha (superior) provavelmente será a consulta que você gostaria de encerrar. Vou assumir que o pid é 1234 abaixo.
Você pode cancelar uma consulta por meio de SQL (ou seja, sem acesso shell), desde que seja sua ou tenha acesso de superusuário:
select pg_cancel_backend(1234);
Essa é uma solicitação "amigável" para cancelar a consulta 1234 e, com alguma sorte, ela desaparecerá depois de um tempo. Eventualmente, isso é mais eficiente:
select pg_terminate_backend(1234);
Se você tiver acesso ao shell e permissões de root ou postgres, também poderá fazer isso no shell. Para "cancelar", pode-se fazer:
kill -INT 1234
e para "encerrar", simplesmente:
kill 1234
NÃO:
kill -9 1234
... isso freqüentemente resultará em todo o servidor postgres caindo em chamas, então você pode reiniciar o postgres. Postgres é bastante robusto, então os dados não serão corrompidos, mas eu recomendo não usar "kill -9" em qualquer caso :-)
Uma "transação ociosa" de longa duração geralmente significa que a transação não foi encerrada com um "commit" ou um "rollback", o que significa que o aplicativo está cheio de bugs ou não foi projetado corretamente para funcionar com bancos de dados transacionais. Deve-se evitar "ociosidade na transação" de longa duração, pois isso também pode causar grandes problemas de desempenho.