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) .