PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

pg_stat_activity não é atualizado em um procedimento ou transação


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