PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

pg_stat_activity ne se met pas à jour dans une procédure ou une transaction

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