PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

pg_stat_activity wird nicht innerhalb einer Prozedur oder Transaktion aktualisiert

PostgreSQL erstellt einen Cache pro Backend (effektiv pro Verbindung) der Daten, die von pg_stat_get_activity() verwendet werden Funktion, die sowohl von pg_stat_activity verwendet wird und pg_stat_replication .

Dieser Cache wird beim Commit/Rollback gelöscht, aber nicht am Ende jeder Anweisung innerhalb einer Transaktion in READ COMMITTED wie immer.

Sie können es explizit mit SELECT pg_stat_clear_snapshot() löschen . Rufen Sie es innerhalb des Körpers einer PL/PgSQL LOOP auf zu aktualisieren.

Es gibt AFAIK keine Möglichkeit, PostgreSQL zu bitten, nach jeder Anweisung automatisch zu aktualisieren, wenn repeatable read verwendet wird oder höhere Isolierung.

Siehe im Quellcode pgstat_read_current_status(void) und pgstat_clear_snapshot(void) .