PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

pg_stat_activity non si aggiorna all'interno di una procedura o transazione

PostgreSQL crea una cache per backend (per connessione, in effetti) dei dati utilizzati da pg_stat_get_activity() funzione utilizzata da entrambi pg_stat_activity e pg_stat_replication .

Questa cache viene cancellata al commit/rollback, ma non alla fine di ogni istruzione all'interno di una transazione in READ COMMITTED come al solito.

Puoi cancellarlo esplicitamente con SELECT pg_stat_clear_snapshot() . Chiamalo all'interno del corpo di un LOOP PL/PgSQL per aggiornare.

Non c'è modo AFAIK per chiedere a PostgreSQL di aggiornarsi automaticamente dopo ogni istruzione quando si utilizza repeatable read o isolamento superiore.

Nel codice sorgente, vedi pgstat_read_current_status(void) e pgstat_clear_snapshot(void) .