PostgreSQL crée un cache par backend (par connexion, en fait) des données utilisées par pg_stat_get_activity() fonction utilisée par les deux pg_stat_activity et pg_stat_replication .
Ce cache est effacé lors de la validation/annulation, mais pas à la fin de chaque instruction dans une transaction dans READ COMMITTED comme d'habitude.
Vous pouvez l'effacer explicitement avec SELECT pg_stat_clear_snapshot() . Appelez-le dans le corps d'une LOOP PL/PgSQL pour rafraîchir.
AFAIK, il n'y a aucun moyen de demander à PostgreSQL de s'actualiser automatiquement après chaque instruction lors de l'utilisation de repeatable read ou isolement supérieur.
Dans le code source, voir pgstat_read_current_status(void) et pgstat_clear_snapshot(void) .