[解決済み] ハングしたクエリ(トランザクション中のアイドル状態)を終了させる。
質問
私はHerokuをCrane Postgresオプションで使用しており、私のローカルマシンからデータベース上でクエリを実行していたところ、私のローカルマシンがクラッシュしました。私が実行する場合
select * from pg_stat_activity
のうち、1つは
<IDLE> in transaction
をcurrent_query_textカラムに追加します。
その結果、終了したクエリによって書き込まれていたテーブルを削除することができません。pg_cancel_backend(N) を使用してみましたが、それは True を返しますが、何も起こらないようです。
テーブルを削除できるように、どのようにこのプロセスを終了させることができますか。
どのように解決するのですか?
これは一般的な Postgres の回答であり、heroku に固有のものではありません。
(この質問に対する単純で愚かな答えは、...ただ postgresql を再起動することです。 それが望ましくない、またはオプションでないと仮定すると...)
このSQLを実行してPIDを見つけます。
SELECT pid , query, * from pg_stat_activity
WHERE state != 'idle' ORDER BY xact_start;
(このクエリはpostgresのバージョンによって修正が必要かもしれません - 最終的には、単にselect * from pg_stat_activityとします). 最初の(左の)列にpidがあり、最初の(上の)行に終了させたいクエリがあると思われます。 以下では、pidが1234であると仮定します。
自分のものであるか、スーパーユーザのアクセス権を持っている限り、SQLを通じて(つまりシェルアクセスなしで)クエリをキャンセルすることができます。
select pg_cancel_backend(1234);
これは 1234-query をキャンセルするための "friendly" リクエストで、運が良ければしばらくして消えます。 結局、この方が効率的なのです。
select pg_terminate_backend(1234);
シェルアクセスおよびrootまたはpostgres権限を持っている場合、シェルから行うこともできます。 キャンセルするには、以下のようにします。
kill -INT 1234
で、quot;terminate" に、簡単に。
kill 1234
しないでください。
kill -9 1234
...この場合、postgresサーバ全体が炎上してしまうことが多いので、postgresを再起動することをお勧めします。 Postgresはかなり堅牢なので、データが破損することはありませんが、どんな場合でも"kill -9"を使用しないことをお勧めします :-)。
長く続く "idle in transaction" は、多くの場合、トランザクションが "commit" または "rollback" で終了していないことを意味し、アプリケーションがバグであるか、トランザクション データベースを扱うように正しく設計されていないことを意味します。 トランザクション内のアイドル状態が長く続くと、パフォーマンス上の大きな問題を引き起こす可能性があるため、避ける必要があります。
関連
-
PostgreSQLのURL解決方法
-
postgresのjsonbプロパティの利用について
-
postgresqlのjsonbデータの問い合わせと変更方法
-
[解決済み] psql: FATAL: データベース "<user>" が存在しない
-
[解決済み] psqlでデータベースを切り替えるには?
-
[解決済み] psql'に非対話的にパスワードを指定するには?
-
[解決済み] 最新バージョンのOS X (Yosemite または El Capitan) をインストールした後に `pg_tblspc` が見つからない。
-
[解決済み] PostgreSQLでカラムが存在しない場合、どのように追加しますか?
-
[解決済み] PostgreSQLでタイムスタンプの差を秒単位で求める
-
[解決済み] 拡張機能は存在するが、uuid_generate_v4 が失敗する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
postgresqlにおける時間処理のコツ(推奨)
-
[解決済み] PostgresでInsert文のUUIDを生成する?
-
[解決済み] PostgreSQLのクエリを記録する方法は?
-
[解決済み] Postgres で、あるデータベースから別のデータベースにテーブルをコピーする
-
[解決済み] Postgres/SQLで2つの整数の最小値/最大値を取得する方法は?
-
[解決済み] PostgreSQLのクエリで、整数を文字列に変換するにはどうすればよいですか?
-
[解決済み] Postgres でシーケンスをリセットし、id 列を新しいデータで埋めるにはどうすればよいですか?
-
[解決済み] PostgreSQLでタイムスタンプの差を秒単位で求める
-
[解決済み] クエリプランにおける「ビットマップヒープスキャン」とは何ですか?
-
[解決済み] Postgresql。条件付き一意性制約