Find Long-Running Queries and Idle-in-Transaction Sessions in PostgreSQL
Lists queries running longer than a minute, their wait events, and idle-in-transaction sessions that block vacuum. The first script to run during a performance incident.
SELECT pid, usename, datname, state,
now() - query_start AS query_age,
now() - xact_start AS xact_age,
wait_event_type, wait_event,
left(query, 200) AS query
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
AND state <> 'idle'
AND now() - query_start > interval '1 minute'
ORDER BY query_start;Note: `idle in transaction` sessions block vacuum. To terminate them (write action), run `SELECT pg_cancel_backend(pid);`, or `pg_terminate_backend(pid)` if it does not respond.