如何在PostgreSQL中的几个并行会话中展示MVCC的工作?

时间:2018-12-10 17:48:25

标签: postgresql demo mvcc

我需要借助并行会话演示MVCC在PostgreSQL中的工作,这些会话将同时访问同一张表。

我不知道该怎么做。 请告诉我。

1 个答案:

答案 0 :(得分:1)

会议1:

CREATE TABLE test(id integer);

INSERT INTO test VALUES (1);

START TRANSACTION;

SELECT ctid, xmin, xmax, id FROM test;
 ctid  | xmin | xmax | id 
-------+------+------+----
 (0,1) | 5163 |    0 |  1
(1 row)

此行版本是由事务5163创建的。它是表块0中的项目1。

UPDATE test SET id = 2;

SELECT ctid, xmin, xmax, id FROM test;
 ctid  | xmin | xmax | id 
-------+------+------+----
 (0,2) | 5164 |    0 |  2
(1 row)

此更新将插入新的行版本。这是表块0中由交易5164(此交易)创建的项目2。

会议2:

SELECT ctid, xmin, xmax, id FROM test;
 ctid  | xmin | xmax | id 
-------+------+------+----
 (0,1) | 5163 | 5164 |  1
(1 row)

会话2仍然看到旧的行版本,因为删除事务5164尚未提交。

会议1:

COMMIT;

会议2:

SELECT ctid, xmin, xmax, id FROM test;
 ctid  | xmin | xmax | id 
-------+------+------+----
 (0,2) | 5164 |    0 |  2
(1 row)

现在会话1已提交,会话2也看到了新的行版本。