Vista di sistema che restituisce una riga per ogni processo server attivo nell'istanza PostgreSQL. È lo strumento principale per osservare in tempo reale cosa sta facendo il database.

Cosa mostra

Casi d'uso tipici

  • Trovare query lente o bloccate
SELECT pid, now() - query_start AS durata, state, query
FROM pg_stat_activity
WHERE state != 'idle'
ORDER BY durata DESC;
  • Individuare lock e attese — utile per capire perché una sessione è ferma: attesa di un lock, I/O lento, client non risponde, ecc.
SELECT pid, wait_event_type, wait_event, query
FROM pg_stat_activity
WHERE wait_event IS NOT NULL;
  • Terminare una connessione bloccata

⚠️ Usa il codice con cautela

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid = <pid_da_terminare>;

pg_terminate_backend() è una funzione PostgreSQL che serve a chiudere forzatamente una specifica connessione o sessione attiva nel database

Note

Richiede il ruolo pg_monitor (o superuser) per vedere le query degli altri utenti. Senza di esso, la colonna query appare NULL per le sessioni altrui.

-- mostra se l'utente corrente ha il ruolo `pg_monitor` assengato
SELECT
rolsuper AS is_superuser,
pg_has_role(CURRENT_USER, 'pg_monitor', 'MEMBER') AS has_pg_monitor
FROM pg_roles
WHERE rolname = CURRENT_USER;