postgresql 读取提交的隔离级别是否存在矛盾?

yftpprvb  于 5个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(89)

我想澄清this question的答案,因为标记的陈述是矛盾的。
SELECT是否可以在一个事务中使用Read Committed Isolation Level获得不同的结果?
基于official documentation
当事务使用此隔离级别时,SELECT查询(没有FOR UPDATE/SHARE子句)1.只看到查询开始前提交的数据;在查询执行期间,它永远不会看到未提交的数据或并发事务提交的更改。实际上,SELECT查询会看到查询开始运行时的数据库快照。但是,2.另外请注意,如果其他事务在第一个SELECT开始之后、第二个SELECT开始之前提交了更改,则两个连续的SELECT命令可以看到不同的数据,即使它们位于单个事务中
让我们假设语句2是正确的,那么语句1的意思是什么呢?两个连续的SELECT命令怎么能看到不同的数据,即使它们在一个事务中如果我们刚刚了解到它永远不会看到查询执行期间并发事务提交的更改
语句1是否意味着如果我们使用连接进行1大的复杂查询,那么这个查询及其连接的表将来自“快照”(被隔离)?

yrdbyhpb

yrdbyhpb1#

混淆是围绕术语“查询”。它意味着特定的选择语句,而不是事务。在事务期间由另一个事务进行的提交仍然可能对事务中稍后的选择可见。

6qfn3psc

6qfn3psc2#

重点是
SELECT查询看到的是查询开始运行时的数据库快照。
这个时刻对于每个查询都是不同的,它不是说“整个事务开始运行的时刻”。

相关问题