これは一般的な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」を使用しないことをお勧めします:-)
長期にわたる「トランザクションのアイドル」は、多くの場合、トランザクションが「コミット」または「ロールバック」で終了しなかったことを意味します。つまり、アプリケーションにバグがあるか、トランザクションデータベースで動作するように適切に設計されていません。長期にわたる「トランザクションのアイドル」は、パフォーマンスに大きな問題を引き起こす可能性があるため、避ける必要があります。