F.22. pageinspect #
pageinspect模块提供了一组函数,允许你在底层检查数据库页的内容,这对调试很有帮助。所有这些函数都只能由超级用户使用。
F.22.1. 函数
-
get_raw_page(relname text, fork text, blkno int) returns bytea get_raw_page读取指定关系的指定块,并以bytea值的形式返回其副本。这样就能获得该块在单一时刻的一致副本。fork应当为'main'(主数据分支)、'fsm'(空闲空间映射)、'vm'(可见性映射)或'init'(初始化分支)。-
get_raw_page(relname text, blkno int) returns bytea 这是
get_raw_page的简写形式,用于从主分支读取。等价于get_raw_page(relname, 'main', blkno)-
page_header(page bytea) returns record page_header显示PostgreSQL所有堆页和索引页共有的字段。应将页面映像(通过
get_raw_page获得)作为参数传入。例如:test=# SELECT * FROM page_header(get_raw_page('pg_class', 0)); lsn | tli | flags | lower | upper | special | pagesize | version | prune_xid -----------+-----+-------+-------+-------+---------+----------+---------+----------- 0/24A1B50 | 1 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0返回的列对应于
PageHeaderData结构体中的字段。详细信息见src/include/storage/bufpage.h。-
heap_page_items(page bytea) returns setof record heap_page_items显示堆页上的所有行指针。对于正在使用的行指针,还会显示元组头。无论这些元组在复制原始页时是否对某个 MVCC 快照可见,都会显示出来。应将堆页面映像(通过
get_raw_page获得)作为参数传入。例如:test=# SELECT * FROM heap_page_items(get_raw_page('pg_class', 0));有关返回字段的说明,参见
src/include/storage/itemid.h和src/include/access/htup.h。-
bt_metap(relname text) returns record bt_metap返回 B-树索引元页的信息。例如:test=# SELECT * FROM bt_metap('pg_cast_oid_index'); -[ RECORD 1 ]----- magic | 340322 version | 2 root | 1 level | 0 fastroot | 1 fastlevel | 0-
bt_page_stats(relname text, blkno int) returns record bt_page_stats返回 B-树索引单个页面的概要信息。例如:test=# SELECT * FROM bt_page_stats('pg_cast_oid_index', 1); -[ RECORD 1 ]-+----- blkno | 1 type | l live_items | 256 dead_items | 0 avg_item_size | 12 page_size | 8192 free_size | 4056 btpo_prev | 0 btpo_next | 0 btpo | 0 btpo_flags | 3-
bt_page_items(relname text, blkno int) returns setof record bt_page_items返回 B-树索引页中所有项的详细信息。例如:test=# SELECT * FROM bt_page_items('pg_cast_oid_index', 1); itemoffset | ctid | itemlen | nulls | vars | data ------------+---------+---------+-------+------+------------- 1 | (0,1) | 12 | f | f | 23 27 00 00 2 | (0,2) | 12 | f | f | 24 27 00 00 3 | (0,3) | 12 | f | f | 25 27 00 00 4 | (0,4) | 12 | f | f | 26 27 00 00 5 | (0,5) | 12 | f | f | 27 27 00 00 6 | (0,6) | 12 | f | f | 28 27 00 00 7 | (0,7) | 12 | f | f | 29 27 00 00 8 | (0,8) | 12 | f | f | 2a 27 00 00-
fsm_page_contents(page bytea) returns text fsm_page_contents显示 FSM 页的内部节点结构。输出是一个多行字符串,页内二叉树中的每个节点对应一行。只打印非零节点。还会打印所谓的“next”指针,它指向下一个将从该页返回的槽位。参见
src/backend/storage/freespace/README,了解 FSM 页面结构的更多信息。