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