pageinspect作为插件,查看数据库中页内容。
这个插件具有的函数功能:
get_raw_page(relname text, fork text, blkno int) returns bytea
读取表文件指定页号的内容。Fork:main,fsm,vm和init:initialization fork。
可以调用get_raw_page(relname text,blkno int)读取main主表内容。
page_header(page bytea) returns record
给定页地址,返回页头信息(heap和index页)。页地址可以通过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 | 0 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0
page_checksum(page bytea,blkno int4) return smallint
计算给定页的checksum,页地址可以通过get_raw_page函数获取,checksum依赖于页号,所以页号必须作为入参传入:
test=# SELECT page_checksum(get_raw_page('pg_class', 0), 0);
page_checksum
---------------
13443
fsm_page_contents显示fsm页的内部结构:
test=# SELECT fsm_page_contents(get_raw_page('pg_class', 'fsm', 0));
输出多行字符串,页中Btree的一个节点一行。只有非零节点才会打印。指向next slot的“next”指针也会打印。
heap_page_items(page bytea) returns setof record
显示heap页中多有line指针。会显示所有tuple。
Select count(*) from heap_page_items(get_raw_page(‘t’,1));
第一页中有几个记录
tuple_data_split(rel_oid oid, t_data bytea, t_infomask integer, t_infomask2 integer, t_bits text [, do_detoast bool]) returns bytea[]
将tuple的数据以16进制按列显示。
heap_page_item_attrs(page bytea, rel_oid regclass [, do_detoast bool]) returns setof record
和heap_page_item_attrs和heap_page_items类似。
bt_metap(relname text) returns record
返回Btree索引的元数据信息:
test=# SELECT * FROM bt_metap('pg_cast_oid_index');
-[ RECORD 1 ]-----------+-------
magic | 340322
version | 3
root | 1
level | 0
fastroot | 1
fastlevel | 0
oldest_xact | 582
last_cleanup_num_tuples | 1000
bt_page_stats(relname text, blkno int) returns record
返回btree索引单页信息:
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
Btree索引页中所有items的详细信息:
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
Btree的叶子页,ctid指向heap tuple。内部页,ctid的页号部分指向索引的其他页。offset部分通常被忽略,设置为1
也可以使用函数bt_page_items(page bytea)
gin_metapage_info:gin索引元数据信息
gin_page_opaque_info:gin索引的opaque域
gin_leafpage_items:gin 叶子页的数据
hash_page_type:hash索引页页类型
hash_page_stats:hash索引的溢出页或者bucket的信息
hash_page_items:
hash_bitmap_info
hash_metapage_info