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
因序列化错误而失败,迫使您重复事务。
我想知道 Postgres 中的事务是否会冻结 table 的状态,类似于 Elasticsearch 中的时间点。
如果有一个带有 where
子句的查询,并且我在一个事务中我 运行 它,首先是 count(*)
,然后是 select
,然后最后,有了 update
,我是否需要担心另一个进程将记录插入数据库并丢弃结果?
在默认事务隔离级别READ COMMITTED
中,事务中的每条语句看到数据库的不同状态(快照)。
如果您希望事务中的所有语句都看到相同的快照,则必须使用 REPEATABLE READ
隔离级别。但是,并发数据操作有可能导致 UPDATE
因序列化错误而失败,迫使您重复事务。