pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
pageinspect模块提供了一组函数,允许你在底层检查数据库页的内容,这对调试很有帮助。所有这些函数都只能由超级用户使用。
get_raw_page(relname text, fork text, blkno int) returns byteaget_raw_page 读取指定表的指定块,并以 bytea 值的形式返回其副本。这样就能获得该块在单一 时刻的一致副本。fork 应为表示 主数据分支的 'main'、表示空闲空间映射的 'fsm',或表示可见性映射的 'vm'。
get_raw_page(relname text, blkno int) returns bytea这是get_raw_page的简写形式,用于从主分支读取。等价于 get_raw_page(relname, 'main', blkno)
page_header(page bytea) returns recordpage_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 recordheap_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 recordbt_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 recordbt_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 recordbt_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 textfsm_page_contents显示 FSM 页的内部节点结构。输出是一个多行字符串,页内二叉树中的每个节点对应一行。只打印非零节点。还会打印所谓的“next”指针,它指向下一个将从该页返回的槽位。
参见src/backend/storage/freespace/README,了解 FSM 页面结构的更多信息。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。