🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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'`。 `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 | checksum | 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_details.h` 获取返回的字段的解释。 `bt_metap(relname text) returns record` `bt_metap`返回关于B-tree索引的元页的信息。例如: ``` 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-tree索引的单个页面的摘要信息。例如: ``` 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-tree索引页中的所有条目的详细信息。例如: ``` 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页面的结构的信息。