我查询pg_stat_activity
但是在我第一次在plpgsql函数体SERIALIZABLE
或REPEATABLE READ
事务中查询内容后,内容似乎保持不变。
为什么pg_stat_activity
不遵循plpgsql过程中READ COMMITTED
的规则?
如何获取当前状态?我想在plpgsql中对pg_stat_activity
的查询进行循环,直到在另一个后端运行的另一个查询完成。
答案 0 :(得分:7)
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)
。