PostgreSQL gör en per-backend (per anslutning, effektivt) cache av data som används av pg_stat_get_activity()
funktion som används av både pg_stat_activity
och pg_stat_replication
.
Denna cache rensas vid commit/rollback, men inte i slutet av varje sats i en transaktion i READ COMMITTED
som vanligt.
Du kan explicit rensa den med SELECT pg_stat_clear_snapshot()
. Kalla det inom brödtexten i en PL/PgSQL LOOP
för att uppdatera.
Det finns AFAIK inget sätt att be PostgreSQL att automatiskt uppdatera efter varje uttalande när du använder repeatable read
eller högre isolering.
I källkoden, se pgstat_read_current_status(void)
och pgstat_clear_snapshot(void)
.