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 を入れてください。