PostgreSQL crea un caché por backend (por conexión, efectivamente) de los datos utilizados por pg_stat_get_activity()
función utilizada por ambos pg_stat_activity
y pg_stat_replication
.
Este caché se borra en la confirmación/reversión, pero no al final de cada declaración dentro de una transacción en READ COMMITTED
como de costumbre.
Puede borrarlo explícitamente con SELECT pg_stat_clear_snapshot()
. Llámalo dentro del cuerpo de un PL/PgSQL LOOP
para actualizar.
AFAIK no hay forma de pedirle a PostgreSQL que se actualice automáticamente después de cada declaración cuando se usa repeatable read
o mayor aislamiento.
En el código fuente, consulte pgstat_read_current_status(void)
y pgstat_clear_snapshot(void)
.