当事务被提交时, 数据库管理系统 要确保一个事务中的 所有操作都成功完成, 并在数据库中永久保存; 如果一个事务中的一部分没有成功, 则系统会把数据库回滚到操作执行之前的状态。...比如 X=1 事务A 执行 X++ 操作; 在事务A 提交之前, 事务B 修改 X=10 并提交成功; 由于事务A 是可重复读的, 事务A 看到的数据还是 X=1....当一个事务运行在这个隔离级别时,一个select查询只能看到查询开始之前已提交的数据,而无法看到未提交的数据或者在查询执行期间其他事务已经提交的数据。...PostgreSQL 内部数据结构中, 每个元组(行记录) 有 4 个与事务可见性相关的 隐藏列:
xmin, 创建该行数据的 xid;
xmax, 删除改行的xid;
cmin, 插入该元组的命令在事务中的命令序列号...;
cmax, 删除该元组的命令在事务中的命令序列号.