これは一般的なPostgresの回答であり、herokuに固有ではありません
(この質問に対する単純で愚かな答えは... postgresqlを再起動するだけかもしれません。それが望ましくないか、オプションではないと仮定すると...)
次のSQLを実行してPIDを見つけます。
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(クエリはpostgresのバージョンに応じて修正が必要になる場合があります-最終的には、pg_stat_activityから*を選択するだけです)。pidは最初(左)の列にあり、最初(上)の行は、終了するクエリである可能性があります。pidが1234であると仮定します。
それがあなたのものであるか、あなたがスーパーユーザーアクセス権を持っている限り、あなたはSQLを通して(すなわちシェルアクセスなしで)クエリをキャンセルすることができます:
select pg_cancel_backend(1234);
これは1234クエリをキャンセルする「友好的な」リクエストであり、運が良ければしばらくすると消えます。最終的に、これはより効率的です。
select pg_terminate_backend(1234);
シェルアクセスとrootまたはpostgres権限がある場合は、シェルからも実行できます。「キャンセル」するには、次のようにします。
kill -INT 1234
「終了」するには、次のようにします。
kill 1234
しない:
kill -9 1234
...その結果、postgresサーバー全体が炎上してしまうことがよくあります。その後、postgresを再起動することもできます。Postgresはかなり堅牢なので、データは破損しませんが、どのような場合でも「kill -9」を使用しないことをお勧めします:-)
多くの場合、「アイドル状態のトランザクション」は、トランザクションが「コミット」または「ロールバック」で終了しなかったことを意味します。つまり、アプリケーションにバグがあるか、トランザクションデータベースで動作するように適切に設計されていません。長時間持続する「トランザクションのアイドル」は、パフォーマンス上の大きな問題を引き起こす可能性があるため、避ける必要があります。