为什么我得到旧数据?

xan*_*ngr 4 postgresql concurrency transaction isolation-level postgresql-9.5

今天我在PostgreSQL 9.5上发现了一些奇怪的东西。(我不知道这是否是因为测试版。)当我想获取数据时,我会从查询中获取旧的和已删除的数据。VACUUM FULL然后我做,然后我得到正确的数据(这是空的)。

我在这里错过了什么吗?PostgreSQL 返回旧数据的原因可能是什么?

注意:自动真空是ON.

Erw*_*ter 6

你会发现Postgres 9.5 手册的Read Committed Isolation Level一章很有指导意义:

Read Committed是 PostgreSQL 中的默认隔离级别。当事务使用此隔离级别时,SELECT查询(没有 FOR UPDATE/SHARE子句)只会看到查询开始之前提交的数据;它永远不会看到未提交的数据或并发事务在查询执行期间提交的更改。

大胆强调我的。

在提交您的事务之前,更改对其他事务不可见。VACUUM与此无关,它只在所有事务完成后清理死元组。