Postgres 事务中的两次相同顺序读取是否保证 return 相同的记录?

Are two identical sequential reads in a Postgres transaction guaranteed return the same records?

我想知道 Postgres 中的事务是否会冻结 table 的状态,类似于 Elasticsearch 中的时间点。

如果有一个带有 where 子句的查询,并且我在一个事务中我 运行 它,首先是 count(*),然后是 select,然后最后,有了 update,我是否需要担心另一个进程将记录插入数据库并丢弃结果?

在默认事务隔离级别READ COMMITTED中,事务中的每条语句看到数据库的不同状态(快照)。

如果您希望事务中的所有语句都看到相同的快照,则必须使用 REPEATABLE READ 隔离级别。但是,并发数据操作有可能导致 UPDATE 因序列化错误而失败,迫使您重复事务。