PostgreSQL で 現在実行中のプロセスと 実行中のクエリや実行時間を取得します。
【参考サイト】
PostgreSQLのちょっとテク - よくきたWiki
SELECT procpid AS "プロセスID", start AS "開始時刻", now() - start AS "実行時間", current_query AS "実行クエリ" FROM (SELECT backendid, pg_stat_get_backend_pid(S.backendid) AS procpid, pg_stat_get_backend_activity_start(S.backendid) AS start, pg_stat_get_backend_activity(S.backendid) AS current_query FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS S ) AS S WHERE current_query <> '<IDLE>' AND procpid <> pg_backend_pid() ORDER BY "実行時間" DESC;
自分自身のプロセスと idle 中のプロセスを除外しています。
件数が少ないときは、"\x" で展開表示 してあげると 長い SQL でも見やすくなります。
db=# \x db=# SELECT .... (省略) -[ RECORD 1 ]----------------------------- プロセスID | 19848 開始時刻 | 2010-03-25 22:17:48.459064+09 実行時間 | 00:00:18.431077 実行クエリ | <IDLE> in transaction
プロセスを止めたい場合は、次のようにします。
db=# SELECT pg_cancel_backend("プロセスID");
"プロセス ID" に対象のプロセス ID を入れてください。