O PostgreSQL faz um cache por backend (por conexão, efetivamente) dos dados usados pelo
pg_stat_get_activity() função usada por ambos pg_stat_activity e pg_stat_replication . Esse cache é limpo no commit/rollback, mas não no final de cada instrução dentro de uma transação em
READ COMMITTED como de costume. Você pode limpar explicitamente com
SELECT pg_stat_clear_snapshot() . Chame-o dentro do corpo de um LOOP PL/PgSQL para atualizar. Não há como o AFAIK pedir ao PostgreSQL para atualizar automaticamente após cada instrução ao usar
repeatable read ou maior isolamento. No código-fonte, veja
pgstat_read_current_status(void) e pgstat_clear_snapshot(void) .