任意のトランザクションが発行してテーブルを使用しているかどうかを点検:
SELECT * FROM pg_stat_activity;
あなたはおそらくidle in transaction
またはactive
あるクエリを見つけ、テーブルt
を伴うとき、あなたは(そのクエリまたはクライアントを強制終了することができますこれは、上記のクエリから返されpid
でそれを識別することによって、クエリ自体を発行ROLLBACK
)を発行:
SELECT pg_cancel_backend(${pid here}); -- cancel query
SELECT pg_terminate_backend(${pid here}); -- terminate connection
チュstをpid
と置き換え、統計情報のアクティビティビューを照会します。
か(私はむしろそれを手動で行うことをお勧めが)あなたもそのようにいくつかのクレイジーな方法でそれを行うことができます:溶液上の
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE query ~* ' t'
AND pid <> pg_backend_pid(); -- prevent killing "yourself" ;-)
は、あなたのテーブル名を考慮し安全でないと生産に使用すべきではありません!これは、テーブルt
に関係しない多くのクエリと一致する可能性があります。
"このセッションでは*アクティブなクエリで使用されているため*"というメッセージはかなり明確です。そのテーブルを使用していないことを確認してください。私が推測しなければならないのは、そのテーブルを使ってトランザクションを開始したにもかかわらず、そのトランザクションをコミットしたことがなく、それらのセッションが「アイドル」ではなく「トランザクションでアイドル状態」でないことです。 –
「アクティブなクエリこのセッションでは、おそらくそれを使用しているものを見つけて、それを落とそうとする前にそれを殺すでしょうか? – SeinopSys
それを使用しているカーソルがありますが、それが再び作成されているという事実はもはや必要ではないということを意味します。強制的にドロップする方法がある場合は、最も簡単な解決策のようです。 – Adam12344