mvcc
http://my.oschina.net/Kenyon/blog/108850
update tuple时会新增一个tuple然后将其隐藏。
delete tuple时会隐藏tuple。
delete tuple时会隐藏tuple。
postgres=# truncate table mm
postgres-# ;
TRUNCATE TABLE
postgres=# insert into mm values(1999);
INSERT 0 1
postgres=# insert into mm values(1999);
INSERT 0 1
postgres=# select * from mm;
a
------
1999
1999
(2 rows)
postgres=# select * from heap_page_items(get_raw_page('mm', 'main',0));
lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid
----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+--------+-------
1 | 8160 | 1 | 32 | 1844 | 0 | 0 | (0,1) | 1 | 2048 | 24 | |
2 | 8128 | 1 | 32 | 1845 | 0 | 0 | (0,2) | 1 | 2048 | 24 | |
(2 rows)
postgres=# update mm set a=2000 where ctid='(0,1)';
UPDATE 1
postgres=# select * from mm;
a
------
1999
2000
(2 rows)
postgres=# select * from heap_page_items(get_raw_page('mm', 'main',0));
lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid
----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+--------+-------
1 | 8160 | 1 | 32 | 1844 | 1846 | 0 | (0,3) | 16385 | 256 | 24 | |
2 | 8128 | 1 | 32 | 1845 | 0 | 0 | (0,2) | 1 | 2048 | 24 | |
3 | 8096 | 1 | 32 | 1846 | 0 | 0 | (0,3) | 32769 | 10240 | 24 | |
(3 rows)
postgres=# delete from mm where ctid='(0,2)';
DELETE 1
postgres=# select * from mm;
a
------
2000
(1 row)

浙公网安备 33010602011771号