PostgreSQL crea una cache per backend (per connessione, in effetti) dei dati utilizzati da pg_stat_get_activity()
funzione utilizzata da entrambi pg_stat_activity
e pg_stat_replication
.
Questa cache viene cancellata al commit/rollback, ma non alla fine di ogni istruzione all'interno di una transazione in READ COMMITTED
come al solito.
Puoi cancellarlo esplicitamente con SELECT pg_stat_clear_snapshot()
. Chiamalo all'interno del corpo di un LOOP
PL/PgSQL per aggiornare.
Non c'è modo AFAIK per chiedere a PostgreSQL di aggiornarsi automaticamente dopo ogni istruzione quando si utilizza repeatable read
o isolamento superiore.
Nel codice sorgente, vedi pgstat_read_current_status(void)
e pgstat_clear_snapshot(void)
.