pg_stat_activity不会在过程或事务中更新

Cra*_*ger 6 postgresql plpgsql

我查询pg_stat_activity但在第一次在plpgsql函数体SERIALIZABLEREPEATABLE READ事务中查询内容后,内容似乎保持不变.

为什么不pg_stat_activity遵循READ COMMITTEDplpgsql过程中的规则?

我如何获得当前状态?我想pg_stat_activity在plpgsql中循环查询,直到在另一个后端运行的另一个查询完成.

Cra*_*ger 11

PostgreSQL对pg_stat_get_activity()两个pg_stat_activity和所使用的函数使用的数据进行每个后端(每个连接,有效)缓存pg_stat_replication.

此缓存在提交/回滚时清除,但不会READ COMMITTED像往常一样在事务中的每个语句的末尾清除.

你可以用它明确地清除它SELECT pg_stat_clear_snapshot().在PL/PgSQL的主体内调用它LOOP来刷新.

在使用repeatable read或更高隔离时,AFAIK无法让PostgreSQL在每个语句后自动刷新.

在源代码中,请参阅pgstat_read_current_status(void)pgstat_clear_snapshot(void).