这是一个普遍的答案,并不特定于heroku。一般来说,取消查询可能需要用户具有超级用户访问权限,无论是postgres服务器还是postgres数据库 - 看起来像普通用户不会在不询问DBA或系统管理员的帮助的情况下杀死自己的查询进程
查找PID通过运行该SQL:
SELECT procpid,* from pg_stat_activity
WHERE current_query<>'<IDLE>' ORDER BY xact_start;
你会发现在第一(左)列procpid,和第一(顶部)行很可能是查询你” d喜欢终止。我会假设下面的pid是1234。
您可以通过SQL取消查询(即没有shell访问,但你可能需要超级用户访问数据库):
select pg_cancel_backend(1234);
这是“软”的方式...查询不会立即消失。如果你赶时间,试试这个:
select pg_terminate_backend(1234);
如果你有shell访问也能做到这一点从壳:
kill -INT 1234
如果没有帮助,使用:
kill 1234
请勿:
kill -9 1234
...这通常会导致整个postgres服务器在火中熄灭,那么您可以重新启动postgres。 Postgres的是相当强劲的,所以数据不会被破坏,但我建议不要在任何情况下;-)
使用“杀-9”,“空闲的交易”是指该交易不是以“提交”或“回滚”终止,这意味着该应用程序有问题或者没有正确设计用于事务数据库。应该避免长期的“闲置交易”,因为它也可能导致重大的性能问题。
也许这个问题应该被改写为“具有Postgres的服务器也没有超级用户访问数据库没有root访问权限时,如何终止我自己的查询”。这似乎确实是一个非常好的问题......我不知道答案。 – tobixen