在PG數據庫中,數據被存儲在數據文件里,數據文件內部被劃分為固定長度的頁(也叫做塊)。可在編譯數據庫時通過–with-blocksize參數指定頁的大小,頁的默認大小為8K。每個表和索引都以固定尺寸的頁數組存儲。 在表中,所有頁在邏輯上都相同,所以一個特定的行可以被存儲在任何頁里。 在索引里,第一個頁通常保留為元頁來保存控制信息, 并且依索引訪問方法的不同,在索引里可能有不同類型的頁。
本文主要介紹如何查看普通表的頁內容。
表頁的結構
表頁的結構圖

表頁內容
可以分為5個區域:
PageHeaderData:pgae頭信息;占用空間大小為24bytes,用于記錄page頁的相關信息。后面會詳細介紹Page頭相關信息。
ItemIdData:行指針;每個指針占用空間大小為4bytes,用于指向一行數據的存放位置。它由三部分組成:
- ? lp_off:行數據相對于 Page 開始位置的偏移量;它只有15位,這就決定了PG數據庫的塊大小最大只能設置為32K。
- ? lp_flags:行指針的狀態標志;共有4種狀態:
- ? 0——LP_UNUSED:未使用狀態,對應的 lp_len 總是為 0
- ? 1——NORMAL:已使用狀態,指向正常狀態的行,對應的 lp_len 總是大于 0
- ? 2——LP_REDIRECT:被HOT特性使用的重定向指針,對應的 lp_len 總是為 0
- ? 3——LP_DEAD:死亡狀態,一般指指針指向的行已被更新或刪除,等待vacuum清理
- ? lp_len:Items部分的實際長度
Free Space:空閑空間;page中的可用空間。新行的指針從這個區域的開頭開始分配,新行的數據從這個區域的結尾開始分配。
Items:行數據;后面會介紹Items中記錄的詳細信息。
Special space:索引訪問模式相關的數據。不同的索引訪問方式存放不同的數據。在普通表中為空。
PageHeaderData
PageHeaderData中共包含8個標識:
pd_lsn:記錄了最后更改Page內容的WAL 日志的 LSN號。xlogid:LSN的高32bit,xrecoff:LSN的低32bit。
pd_checksum:頁面校驗和,為0表示數據庫未開啟數據頁校驗和。
pd_flags:標志位,標識當前頁面的存儲情況。共32個標志位,目前只使用了3個:
- 0x0001——PD_HAS_FREE_LINES:存在未使用的行指針。
- 0x0002——PD_PAGE_FULL:頁已寫滿。
- 0x0004——PD_ALL_VISIBLE:頁內所有行數據是夠對所有事務可見。
- 這三個標志位可疊加記錄:比如pd_flags值為0x0005,表示頁內存在未使用的行指針,并且頁內所有行數據也是夠對所有事務可見。
pd_lower:空閑空間開頭位置在頁中的偏移量,向頁中插入行數據時,會從此位置開始向后分配新的行指針占用的空間
pd_upper:空閑空間結尾位置在頁中的偏移量,向頁中插入行數據時,會從此位置開始向前分配新的行數據占用的空間
pd_special:特殊空間開頭位置在頁中的偏移量.索引相關數據的開始位置,在數據文件中為空(即 pd_special =
pd_pagesize_version:標識前8位記錄頁大小,后八8記錄布局版本號信息。版本號信息解釋如下:
- 0:PostgreSQL 7.3 之前的版本號是 0
- 1:代表PostgreSQL 7.3 ~ 7.4
- 2:代表PostgreSQL 8.0
- 3:代表PostgreSQL 8.1 ~ 8.2
- 4:代表PostgreSQL 8.3 及以后版本
pd_prune_xid:頁面上最舊的XMAX值,如果沒有則為0。如果該位置有值,說明當前Page中存在部分記錄可以被vacuum回收。
Items
由一個定長的頭部(23 個字節)、一個可選的空值位圖加填充位、一個可選的對象 ID 域以及用戶數據組成。
t_xmin:插入或者更新該行的事務ID標志
t_xmax:刪除或者鎖定該行的事務ID標志
t_field3:記錄t_cid或t_xvac;
t_cid:如果這行在一個事務中被插入并刪除,我們會存儲一個復合的命令ID,可以映射到真實的CMIN, CMAX,但只能在原始后端中使用本地狀態。
t_xvac:XVAC 只在老式的VACUUM FULL中設置,它沒有任何的命令子結構,所以不需要CMIN,CMAX (這要求老式VACUUM FULL從不嘗試移動CMIN,CMAX 依然有效的行,例如,正在插入或正在刪除的行)
t_ctid:當前行的CTID或者指向更新后的行的CTID
t_infomask2:低11位用戶標識列的數量,高5位用于HOT技術及元組可見性的標志位;
目前使用的標志位共3個:
- ? 0x2000——HEAP_KEYS_UPDATED:行數據被更新且列被修改了,或者行被刪除了
- ? 0x4000——HEAP_HOT_UPDATED:行被以HOT方式更新了;
- ? 0x8000——HEAP_ONLY_TUPLE/HEAP_TUPLE_HAS_MATCH:HEAP_ONLY_TUPLE代表這是HOT行,HEAP_TUPLE_HAS_MATCH 是在 Hash Join 中臨時使用的標志,只用于 Hash 表中的 tuple,且不需要可見性信息,所以我們可以用一個可見性標志覆蓋他。
t_infomask:用于標識元組當前的狀態。
目前使用的標志如下:
- ? 0x0001——HEAP_HASNULL:有包含null值的列
- ? 0x0002——HEAP_HASVARWIDTH:有變寬屬性的列(varchar)
- ? 0x0004——HEAP_HASEXTERNAL:有存儲在外部的列 (TOAST)
- ? 0x0008——HEAP_HASOID_OLD:有 OID 字段
- ? 0x0010——HEAP_XMAX_KEYSHR_LOCK: XMAX 具有 key-shared 鎖
- ? 0x0020——HEAP_COMBOCID:t_field3的值是t_cid
- ? 0x0040——HEAP_XMAX_EXCL_LOCK:XMAX 具有 exclusive 鎖
- ? 0x0080——HEAP_XMAX_LOCK_ONLY:如果 XMAX 域有效,那么僅僅是鎖的擁有者
- ? 0x0100——HEAP_XMIN_COMMITTED:XMIN 對應的事務已經提交
- ? 0x0200——HEAP_XMIN_INVALID:XMIN 對應的事務無效或者已經被終止
- ? 0x0400——HEAP_XMAX_COMMITTED:XMAX 對應的事務已經提交
- ? 0x0800——HEAP_XMAX_INVALID:XMAX 對應的事務無效或者已經被終止了
- ? 0x1000——HEAP_XMAX_IS_MULTI:XMAX 對應的事務是一個多段事務 ID
- ? 0x2000——HEAP_UPDATED: 這是數據行被更新后的版本
- ? 0x4000——HEAP_MOVED_OFF:被 9.0 之前的 VACUUM FULL 命令移動到另外的地方了,為了兼容二進制程序升級而保留
- ? 0x8000——HEAP_MOVED_IN:被 9.0 之前的 VACUUM FULL 命令從別處移動過來的,也是為了兼容性而保留
還有4個復合狀態:
- ? HEAP_XMAX_SHR_LOCK=HEAP_XMAX_EXCL_LOCK | HEAP_XMAX_KEYSHR_LOCK
- ? HEAP_LOCK_MASK=HEAP_XMAX_SHR_LOCK|HEAP_XMAX_EXCL_LOCK|HEAP_XMAX_KEYSHR_LOCK
- ? HEAP_XMIN_FROZEN=HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID
- ? HEAP_MOVED=HEAP_MOVED_OFF| HEAP_MOVED_IN
t_hoff:指從items項的起始位置到用戶數據實際所在位置的長度
null bitmap:當元組中存在空值時,會出現空值位圖,每個字段占一位。
Padding space:填充位,將null bitmap補充到MAXALIGN的倍數,MAXALIGN的值一般為8。
oid:如果表啟用了WITH OIDS選項,items中還會有一個4字節的OID記錄。
Tuple data:行數據
查看頁內容的工具
pageinspect擴展
安裝pageinspect擴展
使用pageinspect擴展之前,需要在數據庫中加載擴展
create extension pageinspect;
pageinspect擴展提供了很多查看頁內容的相關函數,具體可參考文檔:
https://www.postgresql.org/docs/13/pageinspect.html
使用舉例
查看表t的第0號頁的頁頭信息:
postgres=# select * from page_header(get_raw_page('t','main',0));
lsn | checksum | flags | lower | upper | special | pagesize | version | prune_xid
------------+----------+-------+-------+-------+---------+----------+---------+-----------
1/51015D20 | 29528 | 1 | 776 | 792 | 8192 | 8192 | 4 | 1689
(1 row)
查看表t的第0號頁中行數據相關信息:
postgres=# SELECT * FROM heap_page_items(get_raw_page('t',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 | t_data
-----+--------+----------+--------+--------+--------+----------+---------+-------------+------------+--------+--------+-------+----------------------------
1 | 16 | 2 | 0 | | | | | | | | | |
2 | 832 | 1 | 36 | 1685 | 0 | 0 | (0,2) | 2 | 2050 | 24 | | | \x0f7570646174650030010000
3 | 2032 | 1 | 36 | 1665 | 0 | 0 | (0,3) | 2 | 2306 | 24 | | | \x0f757064617465002d010000
4 | 8112 | 1 | 36 | 1655 | 0 | 0 | (0,4) | 2 | 2306 | 24 | | | \x0f7570646174650058010000
5 | 8072 | 1 | 36 | 1655 | 0 | 0 | (0,5) | 2 | 2306 | 24 | | | \x0f7570646174650059010000
6 | 8032 | 1 | 36 | 1655 | 0 | 0 | (0,6) | 2 | 2306 | 24 | | | \x0f757064617465005a010000
7 | 7992 | 1 | 36 | 1655 | 0 | 0 | (0,7) | 2 | 2306 | 24 | | | \x0f757064617465005b010000
8 | 7952 | 1 | 36 | 1655 | 0 | 0 | (0,8) | 2 | 2306 | 24 | | | \x0f757064617465005c010000
9 | 7912 | 1 | 36 | 1655 | 0 | 0 | (0,9) | 2 | 2306 | 24 | | | \x0f757064617465005d010000
10 | 7872 | 1 | 36 | 1655 | 0 | 0 | (0,10) | 2 | 2306 | 24 | | | \x0f757064617465005e010000
11 | 7832 | 1 | 36 | 1655 | 0 | 0 | (0,11) | 2 | 2306 | 24 | | | \x0f757064617465005f010000
12 | 7792 | 1 | 36 | 1655 | 0 | 0 | (0,12) | 2 | 2306 | 24 | | | \x0f7570646174650060010000
13 | 7752 | 1 | 36 | 1655 | 0 | 0 | (0,13) | 2 | 2306 | 24 | | | \x0f7570646174650061010000
14 | 7712 | 1 | 36 | 1655 | 0 | 0 | (0,14) | 2 | 2306 | 24 | | | \x0f7570646174650062010000
15 | 7672 | 1 | 36 | 1655 | 0 | 0 | (0,15) | 2 | 2306 | 24 | | | \x0f7570646174650063010000
16 | 872 | 1 | 36 | 1669 | 0 | 0 | (0,16) | 32770 | 10498 | 24 | | | \x0f696e7365727400f78a0100
17 | 7632 | 1 | 36 | 1655 | 0 | 0 | (0,17) | 2 | 2306 | 24 | | | \x0f7570646174650064010000
18 | 7592 | 1 | 36 | 1655 | 0 | 0 | (0,18) | 2 | 2306 | 24 | | | \x0f7570646174650065010000
19 | 7552 | 1 | 36 | 1655 | 0 | 0 | (0,19) | 2 | 2306 | 24 | | | \x0f7570646174650066010000
20 | 7512 | 1 | 36 | 1655 | 0 | 0 | (0,20) | 2 | 2306 | 24 | | | \x0f7570646174650067010000
21 | 7472 | 1 | 36 | 1655 | 0 | 0 | (0,21) | 2 | 2306 | 24 | | | \x0f7570646174650068010000
22 | 7432 | 1 | 36 | 1655 | 0 | 0 | (0,22) | 2 | 2306 | 24 | | | \x0f7570646174650069010000
23 | 7392 | 1 | 36 | 1655 | 0 | 0 | (0,23) | 2 | 2306 | 24 | | | \x0f757064617465006a010000
24 | 7352 | 1 | 36 | 1655 | 0 | 0 | (0,24) | 2 | 2306 | 24 | | | \x0f757064617465006b010000
25 | 7312 | 1 | 36 | 1655 | 0 | 0 | (0,25) | 2 | 2306 | 24 | | | \x0f757064617465006c010000
26 | 7272 | 1 | 36 | 1655 | 0 | 0 | (0,26) | 2 | 2306 | 24 | | | \x0f757064617465006d010000
27 | 7232 | 1 | 36 | 1655 | 0 | 0 | (0,27) | 2 | 2306 | 24 | | | \x0f757064617465006e010000
28 | 7192 | 1 | 36 | 1655 | 0 | 0 | (0,28) | 2 | 2306 | 24 | | | \x0f757064617465006f010000
29 | 7152 | 1 | 36 | 1655 | 0 | 0 | (0,29) | 2 | 2306 | 24 | | | \x0f7570646174650070010000
30 | 7112 | 1 | 36 | 1655 | 0 | 0 | (0,30) | 2 | 2306 | 24 | | | \x0f7570646174650071010000
31 | 7072 | 1 | 36 | 1655 | 0 | 0 | (0,31) | 2 | 2306 | 24 | | | \x0f7570646174650072010000
32 | 7032 | 1 | 36 | 1655 | 0 | 0 | (0,32) | 2 | 2306 | 24 | | | \x0f7570646174650073010000
33 | 6992 | 1 | 36 | 1655 | 0 | 0 | (0,33) | 2 | 2306 | 24 | | | \x0f7570646174650074010000
34 | 6952 | 1 | 36 | 1655 | 0 | 0 | (0,34) | 2 | 2306 | 24 | | | \x0f7570646174650075010000
35 | 6912 | 1 | 36 | 1655 | 0 | 0 | (0,35) | 2 | 2306 | 24 | | | \x0f7570646174650076010000
36 | 6872 | 1 | 36 | 1655 | 0 | 0 | (0,36) | 2 | 2306 | 24 | | | \x0f7570646174650077010000
37 | 6832 | 1 | 36 | 1655 | 0 | 0 | (0,37) | 2 | 2306 | 24 | | | \x0f7570646174650078010000
38 | 6792 | 1 | 36 | 1655 | 0 | 0 | (0,38) | 2 | 2306 | 24 | | | \x0f7570646174650079010000
39 | 6752 | 1 | 36 | 1655 | 0 | 0 | (0,39) | 2 | 2306 | 24 | | | \x0f757064617465007a010000
40 | 6712 | 1 | 36 | 1655 | 0 | 0 | (0,40) | 2 | 2306 | 24 | | | \x0f757064617465007b010000
41 | 6672 | 1 | 36 | 1655 | 0 | 0 | (0,41) | 2 | 2306 | 24 | | | \x0f757064617465007c010000
42 | 6632 | 1 | 36 | 1655 | 0 | 0 | (0,42) | 2 | 2306 | 24 | | | \x0f757064617465007d010000
43 | 6592 | 1 | 36 | 1655 | 0 | 0 | (0,43) | 2 | 2306 | 24 | | | \x0f757064617465007e010000
44 | 6552 | 1 | 36 | 1655 | 0 | 0 | (0,44) | 2 | 2306 | 24 | | | \x0f757064617465007f010000
45 | 6512 | 1 | 36 | 1655 | 0 | 0 | (0,45) | 2 | 2306 | 24 | | | \x0f7570646174650080010000
46 | 6472 | 1 | 36 | 1655 | 0 | 0 | (0,46) | 2 | 2306 | 24 | | | \x0f7570646174650081010000
47 | 6432 | 1 | 36 | 1655 | 0 | 0 | (0,47) | 2 | 2306 | 24 | | | \x0f7570646174650082010000
48 | 6392 | 1 | 36 | 1655 | 0 | 0 | (0,48) | 2 | 2306 | 24 | | | \x0f7570646174650083010000
49 | 6352 | 1 | 36 | 1655 | 0 | 0 | (0,49) | 2 | 2306 | 24 | | | \x0f7570646174650084010000
50 | 6312 | 1 | 36 | 1655 | 0 | 0 | (0,50) | 2 | 2306 | 24 | | | \x0f7570646174650085010000
51 | 6272 | 1 | 36 | 1655 | 0 | 0 | (0,51) | 2 | 2306 | 24 | | | \x0f7570646174650086010000
52 | 6232 | 1 | 36 | 1655 | 0 | 0 | (0,52) | 2 | 2306 | 24 | | | \x0f7570646174650087010000
53 | 6192 | 1 | 36 | 1655 | 0 | 0 | (0,53) | 2 | 2306 | 24 | | | \x0f7570646174650088010000
54 | 6152 | 1 | 36 | 1655 | 0 | 0 | (0,54) | 2 | 2306 | 24 | | | \x0f7570646174650089010000
55 | 6112 | 1 | 36 | 1655 | 0 | 0 | (0,55) | 2 | 2306 | 24 | | | \x0f757064617465008a010000
56 | 6072 | 1 | 36 | 1655 | 0 | 0 | (0,56) | 2 | 2306 | 24 | | | \x0f757064617465008b010000
57 | 6032 | 1 | 36 | 1655 | 0 | 0 | (0,57) | 2 | 2306 | 24 | | | \x0f757064617465008c010000
58 | 5992 | 1 | 36 | 1655 | 0 | 0 | (0,58) | 2 | 2306 | 24 | | | \x0f757064617465008d010000
59 | 5952 | 1 | 36 | 1655 | 0 | 0 | (0,59) | 2 | 2306 | 24 | | | \x0f757064617465008e010000
60 | 5912 | 1 | 36 | 1655 | 0 | 0 | (0,60) | 2 | 2306 | 24 | | | \x0f757064617465008f010000
61 | 5872 | 1 | 36 | 1655 | 0 | 0 | (0,61) | 2 | 2306 | 24 | | | \x0f7570646174650090010000
62 | 5832 | 1 | 36 | 1655 | 0 | 0 | (0,62) | 2 | 2306 | 24 | | | \x0f7570646174650091010000
63 | 5792 | 1 | 36 | 1655 | 0 | 0 | (0,63) | 2 | 2306 | 24 | | | \x0f7570646174650092010000
64 | 5752 | 1 | 36 | 1655 | 0 | 0 | (0,64) | 2 | 2306 | 24 | | | \x0f7570646174650093010000
65 | 5712 | 1 | 36 | 1655 | 0 | 0 | (0,65) | 2 | 2306 | 24 | | | \x0f7570646174650094010000
66 | 5672 | 1 | 36 | 1655 | 0 | 0 | (0,66) | 2 | 2306 | 24 | | | \x0f7570646174650095010000
67 | 5632 | 1 | 36 | 1655 | 0 | 0 | (0,67) | 2 | 2306 | 24 | | | \x0f7570646174650096010000
68 | 5592 | 1 | 36 | 1655 | 0 | 0 | (0,68) | 2 | 2306 | 24 | | | \x0f7570646174650097010000
69 | 5552 | 1 | 36 | 1655 | 0 | 0 | (0,69) | 2 | 2306 | 24 | | | \x0f7570646174650098010000
70 | 5512 | 1 | 36 | 1655 | 0 | 0 | (0,70) | 2 | 2306 | 24 | | | \x0f7570646174650099010000
71 | 5472 | 1 | 36 | 1655 | 0 | 0 | (0,71) | 2 | 2306 | 24 | | | \x0f757064617465009a010000
72 | 5432 | 1 | 36 | 1655 | 0 | 0 | (0,72) | 2 | 2306 | 24 | | | \x0f757064617465009b010000
73 | 5392 | 1 | 36 | 1655 | 0 | 0 | (0,73) | 2 | 2306 | 24 | | | \x0f757064617465009c010000
74 | 5352 | 1 | 36 | 1655 | 0 | 0 | (0,74) | 2 | 2306 | 24 | | | \x0f757064617465009d010000
75 | 5312 | 1 | 36 | 1655 | 0 | 0 | (0,75) | 2 | 2306 | 24 | | | \x0f757064617465009e010000
76 | 5272 | 1 | 36 | 1655 | 0 | 0 | (0,76) | 2 | 2306 | 24 | | | \x0f757064617465009f010000
77 | 5232 | 1 | 36 | 1655 | 0 | 0 | (0,77) | 2 | 2306 | 24 | | | \x0f75706461746500a0010000
78 | 5192 | 1 | 36 | 1655 | 0 | 0 | (0,78) | 2 | 2306 | 24 | | | \x0f75706461746500a1010000
79 | 5152 | 1 | 36 | 1655 | 0 | 0 | (0,79) | 2 | 2306 | 24 | | | \x0f75706461746500a2010000
80 | 5112 | 1 | 36 | 1655 | 0 | 0 | (0,80) | 2 | 2306 | 24 | | | \x0f75706461746500a3010000
81 | 5072 | 1 | 36 | 1655 | 0 | 0 | (0,81) | 2 | 2306 | 24 | | | \x0f75706461746500a4010000
82 | 5032 | 1 | 36 | 1655 | 0 | 0 | (0,82) | 2 | 2306 | 24 | | | \x0f75706461746500a5010000
83 | 4992 | 1 | 36 | 1655 | 0 | 0 | (0,83) | 2 | 2306 | 24 | | | \x0f75706461746500a6010000
84 | 4952 | 1 | 36 | 1655 | 0 | 0 | (0,84) | 2 | 2306 | 24 | | | \x0f75706461746500a7010000
85 | 4912 | 1 | 36 | 1655 | 0 | 0 | (0,85) | 2 | 2306 | 24 | | | \x0f75706461746500a8010000
86 | 4872 | 1 | 36 | 1655 | 0 | 0 | (0,86) | 2 | 2306 | 24 | | | \x0f75706461746500a9010000
87 | 4832 | 1 | 36 | 1655 | 0 | 0 | (0,87) | 2 | 2306 | 24 | | | \x0f75706461746500aa010000
88 | 4792 | 1 | 36 | 1655 | 0 | 0 | (0,88) | 2 | 2306 | 24 | | | \x0f75706461746500ab010000
89 | 4752 | 1 | 36 | 1655 | 0 | 0 | (0,89) | 2 | 2306 | 24 | | | \x0f75706461746500ac010000
90 | 4712 | 1 | 36 | 1655 | 0 | 0 | (0,90) | 2 | 2306 | 24 | | | \x0f75706461746500ad010000
91 | 4672 | 1 | 36 | 1655 | 0 | 0 | (0,91) | 2 | 2306 | 24 | | | \x0f75706461746500ae010000
92 | 4632 | 1 | 36 | 1655 | 0 | 0 | (0,92) | 2 | 2306 | 24 | | | \x0f75706461746500af010000
93 | 4592 | 1 | 36 | 1655 | 0 | 0 | (0,93) | 2 | 2306 | 24 | | | \x0f75706461746500b0010000
94 | 4552 | 1 | 36 | 1655 | 0 | 0 | (0,94) | 2 | 2306 | 24 | | | \x0f75706461746500b1010000
95 | 4512 | 1 | 36 | 1655 | 0 | 0 | (0,95) | 2 | 2306 | 24 | | | \x0f75706461746500b2010000
96 | 4472 | 1 | 36 | 1655 | 0 | 0 | (0,96) | 2 | 2306 | 24 | | | \x0f75706461746500b3010000
97 | 4432 | 1 | 36 | 1655 | 0 | 0 | (0,97) | 2 | 2306 | 24 | | | \x0f75706461746500b4010000
98 | 4392 | 1 | 36 | 1655 | 0 | 0 | (0,98) | 2 | 2306 | 24 | | | \x0f75706461746500b5010000
99 | 4352 | 1 | 36 | 1655 | 0 | 0 | (0,99) | 2 | 2306 | 24 | | | \x0f75706461746500b6010000
100 | 4312 | 1 | 36 | 1655 | 0 | 0 | (0,100) | 2 | 2306 | 24 | | | \x0f75706461746500b7010000
101 | 4272 | 1 | 36 | 1655 | 0 | 0 | (0,101) | 2 | 2306 | 24 | | | \x0f75706461746500b8010000
102 | 4232 | 1 | 36 | 1655 | 0 | 0 | (0,102) | 2 | 2306 | 24 | | | \x0f75706461746500b9010000
103 | 187 | 2 | 0 | | | | | | | | | |
104 | 1992 | 1 | 36 | 1665 | 0 | 0 | (0,104) | 2 | 2306 | 24 | | | \x0f757064617465002e010000
105 | 4192 | 1 | 36 | 1655 | 0 | 0 | (0,105) | 2 | 2306 | 24 | | | \x0f75706461746500ba010000
106 | 4152 | 1 | 36 | 1655 | 0 | 0 | (0,106) | 2 | 2306 | 24 | | | \x0f75706461746500bb010000
107 | 4112 | 1 | 36 | 1655 | 0 | 0 | (0,107) | 2 | 2306 | 24 | | | \x0f75706461746500bc010000
108 | 4072 | 1 | 36 | 1655 | 0 | 0 | (0,108) | 2 | 2306 | 24 | | | \x0f75706461746500bd010000
109 | 4032 | 1 | 36 | 1655 | 0 | 0 | (0,109) | 2 | 2306 | 24 | | | \x0f75706461746500be010000
110 | 3992 | 1 | 36 | 1655 | 0 | 0 | (0,110) | 2 | 2306 | 24 | | | \x0f75706461746500bf010000
111 | 3952 | 1 | 36 | 1655 | 0 | 0 | (0,111) | 2 | 2306 | 24 | | | \x0f75706461746500c0010000
112 | 3912 | 1 | 36 | 1655 | 0 | 0 | (0,112) | 2 | 2306 | 24 | | | \x0f75706461746500c1010000
113 | 3872 | 1 | 36 | 1655 | 0 | 0 | (0,113) | 2 | 2306 | 24 | | | \x0f75706461746500c2010000
114 | 3832 | 1 | 36 | 1655 | 0 | 0 | (0,114) | 2 | 2306 | 24 | | | \x0f75706461746500c3010000
115 | 3792 | 1 | 36 | 1655 | 0 | 0 | (0,115) | 2 | 2306 | 24 | | | \x0f75706461746500c4010000
116 | 3752 | 1 | 36 | 1655 | 0 | 0 | (0,116) | 2 | 2306 | 24 | | | \x0f75706461746500c5010000
117 | 3712 | 1 | 36 | 1655 | 0 | 0 | (0,117) | 2 | 2306 | 24 | | | \x0f75706461746500c6010000
118 | 3672 | 1 | 36 | 1655 | 0 | 0 | (0,118) | 2 | 2306 | 24 | | | \x0f75706461746500c7010000
119 | 3632 | 1 | 36 | 1655 | 0 | 0 | (0,119) | 2 | 2306 | 24 | | | \x0f75706461746500c8010000
120 | 3592 | 1 | 36 | 1655 | 0 | 0 | (0,120) | 2 | 2306 | 24 | | | \x0f75706461746500c9010000
121 | 3552 | 1 | 36 | 1655 | 0 | 0 | (0,121) | 2 | 2306 | 24 | | | \x0f75706461746500ca010000
122 | 3512 | 1 | 36 | 1655 | 0 | 0 | (0,122) | 2 | 2306 | 24 | | | \x0f75706461746500cb010000
123 | 3472 | 1 | 36 | 1655 | 0 | 0 | (0,123) | 2 | 2306 | 24 | | | \x0f75706461746500cc010000
124 | 3432 | 1 | 36 | 1655 | 0 | 0 | (0,124) | 2 | 2306 | 24 | | | \x0f75706461746500cd010000
125 | 3392 | 1 | 36 | 1655 | 0 | 0 | (0,125) | 2 | 2306 | 24 | | | \x0f75706461746500ce010000
126 | 3352 | 1 | 36 | 1655 | 0 | 0 | (0,126) | 2 | 2306 | 24 | | | \x0f75706461746500cf010000
127 | 3312 | 1 | 36 | 1655 | 0 | 0 | (0,127) | 2 | 2306 | 24 | | | \x0f75706461746500d0010000
128 | 3272 | 1 | 36 | 1655 | 0 | 0 | (0,128) | 2 | 2306 | 24 | | | \x0f75706461746500d1010000
129 | 3232 | 1 | 36 | 1655 | 0 | 0 | (0,129) | 2 | 2306 | 24 | | | \x0f75706461746500d2010000
130 | 3192 | 1 | 36 | 1655 | 0 | 0 | (0,130) | 2 | 2306 | 24 | | | \x0f75706461746500d3010000
131 | 3152 | 1 | 36 | 1655 | 0 | 0 | (0,131) | 2 | 2306 | 24 | | | \x0f75706461746500d4010000
132 | 3112 | 1 | 36 | 1655 | 0 | 0 | (0,132) | 2 | 2306 | 24 | | | \x0f75706461746500d5010000
133 | 3072 | 1 | 36 | 1655 | 0 | 0 | (0,133) | 2 | 2306 | 24 | | | \x0f75706461746500d6010000
134 | 3032 | 1 | 36 | 1655 | 0 | 0 | (0,134) | 2 | 2306 | 24 | | | \x0f75706461746500d7010000
135 | 2992 | 1 | 36 | 1655 | 0 | 0 | (0,135) | 2 | 2306 | 24 | | | \x0f75706461746500d8010000
136 | 2952 | 1 | 36 | 1655 | 0 | 0 | (0,136) | 2 | 2306 | 24 | | | \x0f75706461746500d9010000
137 | 2912 | 1 | 36 | 1655 | 0 | 0 | (0,137) | 2 | 2306 | 24 | | | \x0f75706461746500da010000
138 | 2872 | 1 | 36 | 1655 | 0 | 0 | (0,138) | 2 | 2306 | 24 | | | \x0f75706461746500db010000
139 | 2832 | 1 | 36 | 1655 | 0 | 0 | (0,139) | 2 | 2306 | 24 | | | \x0f75706461746500dc010000
140 | 2792 | 1 | 36 | 1655 | 0 | 0 | (0,140) | 2 | 2306 | 24 | | | \x0f75706461746500dd010000
141 | 2752 | 1 | 36 | 1655 | 0 | 0 | (0,141) | 2 | 2306 | 24 | | | \x0f75706461746500de010000
142 | 2712 | 1 | 36 | 1655 | 0 | 0 | (0,142) | 2 | 2306 | 24 | | | \x0f75706461746500df010000
143 | 2672 | 1 | 36 | 1655 | 0 | 0 | (0,143) | 2 | 2306 | 24 | | | \x0f75706461746500e0010000
144 | 2632 | 1 | 36 | 1655 | 0 | 0 | (0,144) | 2 | 2306 | 24 | | | \x0f75706461746500e1010000
145 | 2592 | 1 | 36 | 1655 | 0 | 0 | (0,145) | 2 | 2306 | 24 | | | \x0f75706461746500e2010000
146 | 2552 | 1 | 36 | 1655 | 0 | 0 | (0,146) | 2 | 2306 | 24 | | | \x0f75706461746500e3010000
147 | 2512 | 1 | 36 | 1655 | 0 | 0 | (0,147) | 2 | 2306 | 24 | | | \x0f75706461746500e4010000
148 | 2472 | 1 | 36 | 1655 | 0 | 0 | (0,148) | 2 | 2306 | 24 | | | \x0f75706461746500e5010000
149 | 2432 | 1 | 36 | 1655 | 0 | 0 | (0,149) | 2 | 2306 | 24 | | | \x0f75706461746500e6010000
150 | 2392 | 1 | 36 | 1655 | 0 | 0 | (0,150) | 2 | 2306 | 24 | | | \x0f75706461746500e7010000
151 | 2352 | 1 | 36 | 1655 | 0 | 0 | (0,151) | 2 | 2306 | 24 | | | \x0f75706461746500e8010000
152 | 2312 | 1 | 36 | 1655 | 0 | 0 | (0,152) | 2 | 2306 | 24 | | | \x0f75706461746500e9010000
153 | 2272 | 1 | 36 | 1655 | 0 | 0 | (0,153) | 2 | 2306 | 24 | | | \x0f75706461746500ea010000
154 | 2232 | 1 | 36 | 1655 | 0 | 0 | (0,154) | 2 | 2306 | 24 | | | \x0f75706461746500eb010000
155 | 2192 | 1 | 36 | 1655 | 0 | 0 | (0,155) | 2 | 2306 | 24 | | | \x0f75706461746500ec010000
156 | 2152 | 1 | 36 | 1655 | 0 | 0 | (0,156) | 2 | 2306 | 24 | | | \x0f75706461746500ed010000
157 | 2112 | 1 | 36 | 1655 | 0 | 0 | (0,157) | 2 | 2306 | 24 | | | \x0f75706461746500ee010000
158 | 2072 | 1 | 36 | 1655 | 0 | 0 | (0,158) | 2 | 2306 | 24 | | | \x0f75706461746500ef010000
159 | 1952 | 1 | 36 | 1665 | 0 | 0 | (0,159) | 2 | 2306 | 24 | | | \x0f757064617465002f010000
160 | 1912 | 1 | 36 | 1665 | 0 | 0 | (0,160) | 2 | 2306 | 24 | | | \x0f7570646174650030010000
161 | 1872 | 1 | 36 | 1665 | 0 | 0 | (0,161) | 2 | 2306 | 24 | | | \x0f7570646174650031010000
162 | 1832 | 1 | 36 | 1665 | 0 | 0 | (0,162) | 2 | 2306 | 24 | | | \x0f7570646174650032010000
163 | 1792 | 1 | 36 | 1665 | 0 | 0 | (0,163) | 2 | 2306 | 24 | | | \x0f7570646174650033010000
164 | 1752 | 1 | 36 | 1665 | 0 | 0 | (0,164) | 2 | 2306 | 24 | | | \x0f7570646174650034010000
165 | 1712 | 1 | 36 | 1665 | 0 | 0 | (0,165) | 2 | 2306 | 24 | | | \x0f7570646174650035010000
166 | 1672 | 1 | 36 | 1665 | 0 | 0 | (0,166) | 2 | 2306 | 24 | | | \x0f7570646174650036010000
167 | 1632 | 1 | 36 | 1665 | 0 | 0 | (0,167) | 2 | 2306 | 24 | | | \x0f7570646174650037010000
168 | 1592 | 1 | 36 | 1665 | 0 | 0 | (0,168) | 2 | 2306 | 24 | | | \x0f7570646174650038010000
169 | 1552 | 1 | 36 | 1665 | 0 | 0 | (0,169) | 2 | 2306 | 24 | | | \x0f7570646174650039010000
170 | 1512 | 1 | 36 | 1665 | 0 | 0 | (0,170) | 2 | 2306 | 24 | | | \x0f757064617465003a010000
171 | 1472 | 1 | 36 | 1665 | 0 | 0 | (0,171) | 2 | 2306 | 24 | | | \x0f757064617465003b010000
172 | 1432 | 1 | 36 | 1665 | 0 | 0 | (0,172) | 2 | 2306 | 24 | | | \x0f757064617465003c010000
173 | 1392 | 1 | 36 | 1665 | 0 | 0 | (0,173) | 2 | 2306 | 24 | | | \x0f757064617465003d010000
174 | 1352 | 1 | 36 | 1665 | 0 | 0 | (0,174) | 2 | 2306 | 24 | | | \x0f757064617465003e010000
175 | 1312 | 1 | 36 | 1665 | 0 | 0 | (0,175) | 2 | 2306 | 24 | | | \x0f757064617465003f010000
176 | 1272 | 1 | 36 | 1665 | 0 | 0 | (0,176) | 2 | 2306 | 24 | | | \x0f7570646174650040010000
177 | 1232 | 1 | 36 | 1665 | 0 | 0 | (0,177) | 2 | 2306 | 24 | | | \x0f7570646174650041010000
178 | 1192 | 1 | 36 | 1665 | 0 | 0 | (0,178) | 2 | 2306 | 24 | | | \x0f7570646174650042010000
179 | 1152 | 1 | 36 | 1665 | 0 | 0 | (0,179) | 2 | 2306 | 24 | | | \x0f7570646174650043010000
180 | 792 | 1 | 36 | 1686 | 0 | 0 | (0,180) | 2 | 2050 | 24 | | | \x0f7570646174650030010000
181 | 1112 | 1 | 36 | 1665 | 0 | 0 | (0,181) | 2 | 2306 | 24 | | | \x0f7570646174650045010000
182 | 1072 | 1 | 36 | 1665 | 0 | 0 | (0,182) | 2 | 2306 | 24 | | | \x0f7570646174650046010000
183 | 1032 | 1 | 36 | 1665 | 0 | 0 | (0,183) | 2 | 2306 | 24 | | | \x0f7570646174650047010000
184 | 992 | 1 | 36 | 1665 | 0 | 0 | (0,184) | 2 | 2306 | 24 | | | \x0f7570646174650048010000
185 | 952 | 1 | 36 | 1665 | 0 | 0 | (0,185) | 2 | 2306 | 24 | | | \x0f7570646174650049010000
186 | 912 | 1 | 36 | 1665 | 0 | 0 | (0,186) | 2 | 2306 | 24 | | | \x0f757064617465004a010000
187 | 8152 | 1 | 36 | 1646 | 0 | 0 | (0,187) | 32770 | 10498 | 24 | | | \x0f75706461746500a1860100
188 | 0 | 0 | 0 | | | | | | | | | |
(188 rows)
pg_filedump工具
安裝pg_filedump工具
su - postgres git clone git://git.postgresql.org/git/pg_filedump.git cd pg_filedump make && make install
使用pg_filedump工具
[postgres@mogdb1 13580]$ pg_filedump -D varchar,int -i 16977|more ******************************************************************* * PostgreSQL File/Block Formatted Dump Utility * * File: 16977 * Options used: -D varchar,int -i ******************************************************************* Block 0 ******************************************************** <Header> ----- Block Offset: 0x00000000 Offsets: Lower 776 (0x0308) Block: Size 8192 Version 4 Upper 792 (0x0318) LSN: logid 1 recoff 0x51015d20 Special 8192 (0x2000) Items: 188 Free Space: 16 Checksum: 0x1b45 Prune XID: 0x00000699 Flags: 0x0001 (HAS_FREE_LINES) Length (including item array): 776 <Data> ----- Item 1 -- Length: 0 Offset: 16 (0x0010) Flags: REDIRECT Item 2 -- Length: 36 Offset: 832 (0x0340) Flags: NORMAL XMIN: 1685 XMAX: 0 CID|XVAC: 0 Block Id: 0 linp Index: 2 Attributes: 2 Size: 24 infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) COPY: update 304 Item 3 -- Length: 36 Offset: 2032 (0x07f0) Flags: NORMAL XMIN: 1665 XMAX: 1689 CID|XVAC: 0 Block Id: 0 linp Index: 3 Attributes: 2 Size: 24 infomask: 0x0102 (HASVARWIDTH|XMIN_COMMITTED|KEYS_UPDATED) COPY: update 301 Item 4 -- Length: 36 Offset: 8112 (0x1fb0) Flags: NORMAL XMIN: 1655 XMAX: 0 CID|XVAC: 0 Block Id: 0 linp Index: 4 Attributes: 2 Size: 24 infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) COPY: update 344 Item 5 -- Length: 36 Offset: 8072 (0x1f88) Flags: NORMAL XMIN: 1655 XMAX: 0 CID|XVAC: 0 Block Id: 0 linp Index: 5 Attributes: 2 Size: 24 infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) COPY: update 345 Item 6 -- Length: 36 Offset: 8032 (0x1f60) Flags: NORMAL XMIN: 1655 XMAX: 0 CID|XVAC: 0 Block Id: 0 linp Index: 6 Attributes: 2 Size: 24 infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) COPY: update 346 Item 7 -- Length: 36 Offset: 7992 (0x1f38) Flags: NORMAL XMIN: 1655 XMAX: 0 CID|XVAC: 0 Block Id: 0 linp Index: 7 Attributes: 2 Size: 24 infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID) COPY: update 347 Item 8 -- Length: 36 Offset: 7952 (0x1f10) Flags: NORMAL XMIN: 1655 XMAX: 0 CID|XVAC: 0 Block Id: 0 linp Index: 8 Attributes: 2 Size: 24 infomask: 0x0902 (HASVARWIDTH|XMIN_COMMITTED|XMAX_INVALID)
通過觀察頁內數據的變化,有助于我們理解PG數據庫中MVCC,VACUUM以及HOT特性的原理。




