为什么 PostgreSQL 中的 xmin 和 xmax 值相同?
Why xmin and xmax values are same in PostgreSQL?
我一直在学习 PostgreSQL 中的 MVCC。据我了解,更新行时,将添加一个新行,旧行中的 xmax
值将具有新添加行的 xmin
的值。
当我在我的 Postgres 数据库中的 table 中检查它时,xmin
和 xmax
值是相同的。这是什么意思?
xmin | xmax | id | serial | paid
----------+----------+----------+----------------+------
54569114 | 54569114 | 11099324 | 76605297311437 | t
54569111 | 54569111 | 11099323 | 38131108141783 | t
54569101 | 54569101 | 11099322 | 49399633274146 | t
54569092 | 0 | 11099321 | 44672543705101 | f
54569090 | 54569090 | 11099320 | 21324499293647 | t
54569083 | 0 | 11099319 | 82878160317074 | f
54569079 | 54569079 | 11099318 | 31091666079121 | t
xmax
有双重作用:它用于标记可见性(与 xmin
一起,但它也用于保存 row locks.
为了消除这两者之间的歧义,使用事务的状态并使用元组中的进一步“不可见”标志。
因此,如果您看到两个值相同的行,则创建该行的事务也锁定了该行。这通常表示元组是使用 INSERT ... ON CONFLICT
.
创建的
有关详细信息,请参阅 and my blog post。
我一直在学习 PostgreSQL 中的 MVCC。据我了解,更新行时,将添加一个新行,旧行中的 xmax
值将具有新添加行的 xmin
的值。
当我在我的 Postgres 数据库中的 table 中检查它时,xmin
和 xmax
值是相同的。这是什么意思?
xmin | xmax | id | serial | paid
----------+----------+----------+----------------+------
54569114 | 54569114 | 11099324 | 76605297311437 | t
54569111 | 54569111 | 11099323 | 38131108141783 | t
54569101 | 54569101 | 11099322 | 49399633274146 | t
54569092 | 0 | 11099321 | 44672543705101 | f
54569090 | 54569090 | 11099320 | 21324499293647 | t
54569083 | 0 | 11099319 | 82878160317074 | f
54569079 | 54569079 | 11099318 | 31091666079121 | t
xmax
有双重作用:它用于标记可见性(与 xmin
一起,但它也用于保存 row locks.
为了消除这两者之间的歧义,使用事务的状态并使用元组中的进一步“不可见”标志。
因此,如果您看到两个值相同的行,则创建该行的事务也锁定了该行。这通常表示元组是使用 INSERT ... ON CONFLICT
.
有关详细信息,请参阅