F.31. pageinspect
ÐодÑÐ»Ñ pageinspect пÑедоÑÑавлÑÐµÑ ÑÑнкÑии, позволÑÑÑие иÑÑледоваÑÑ ÑÑÑаниÑÑ Ð±Ð°Ð· даннÑÑ
на низком ÑÑовне, ÑÑо бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð¾Ñладки. ÐÑе ÑÑи ÑÑнкÑии могÑÑ Ð²ÑзÑваÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.
F.31.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показÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»Ñ, обÑие Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑÑÐ°Ð½Ð¸Ñ ÐºÑÑи и индекÑа Postgres Pro.РкаÑеÑÑве аÑгÑменÑа ей пеÑедаÑÑÑÑ Ð¾Ð±Ñаз ÑÑÑаниÑÑ, полÑÑеннÑй в ÑезÑлÑÑаÑе вÑзова
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.-
tuple_data_split(rel_oid oid, t_data bytea, t_infomask integer, t_infomask2 integer, t_bits text [, do_detoast bool]) returns bytea[] ФÑнкÑиÑ
tuple_data_splitÑазделÑÐµÑ Ð´Ð°Ð½Ð½Ñе коÑÑежей на аÑÑибÑÑÑ Ñак, как ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð²Ð½ÑÑÑи ÑеÑвеÑа.test=# SELECT tuple_data_split('pg_class'::regclass, t_data, t_infomask, t_infomask2, t_bits) FROM heap_page_items(get_raw_page('pg_class', 0));РкаÑеÑÑве аÑгÑменÑов ÑÑой ÑÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑедаваÑÑÑÑ Ð°ÑÑибÑÑÑ, возвÑаÑаемÑе ÑÑнкÑией
heap_page_items.ÐÑли паÑамеÑÑ
do_detoastÑавенtrue, полÑÑеннÑе аÑÑибÑÑÑ Ð±ÑдÑÑ ÑаÑÐ¿Ð°ÐºÐ¾Ð²Ð°Ð½Ñ Ð¿Ð¾ меÑе Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. ÐÑли он не задан, подÑазÑмеваеÑÑÑfalse.-
heap_page_item_attrs(page bytea, rel_oid regclass [, do_detoast bool]) returns setof record ФÑнкÑиÑ
heap_page_item_attrsÐ¿Ð¾Ñ Ð¾Ð¶Ð° наheap_page_items, но возвÑаÑÐ°ÐµÑ Ð½ÐµÑÑÑÑкÑÑÑиÑованное ÑодеÑжимое коÑÑежа в виде маÑÑива аÑÑибÑÑов, коÑоÑÑе могÑÑ Ð±ÑÑÑ ÑаÑпакованÑ, еÑли ÑÑÑановлен Ñлагdo_detoast(по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¸ не ÑаÑпаковÑваÑÑÑÑ).РкаÑеÑÑве аÑгÑменÑа ей пеÑедаÑÑÑÑ Ð¾Ð±Ñаз ÑÑÑаниÑÑ ÐºÑÑи, полÑÑеннÑй в ÑезÑлÑÑаÑе вÑзова
get_raw_page. ÐапÑимеÑ:test=# SELECT * FROM heap_page_item_attrs(get_raw_page('pg_class', 0), 'pg_class'::regclass);-
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Ðа ÑÑÑаниÑе ÑÑÐ¾Ð²Ð½Ñ Ð»Ð¸ÑÑÑев B-деÑева,
ctidÑказÑÐ²Ð°ÐµÑ Ð½Ð° коÑÑеж в кÑÑе. Ðа внÑÑÑенней ÑÑÑаниÑе ÑаÑÑÑctid, ÑодеÑжаÑÐ°Ñ Ð½Ð¾Ð¼ÐµÑ Ð±Ð»Ð¾ÐºÐ°, ÑказÑÐ²Ð°ÐµÑ Ð½Ð° дÑÑгÑÑ ÑÑÑаниÑÑ Ð² Ñамом индекÑе, а ÑаÑÑÑ ÑмеÑÐµÐ½Ð¸Ñ (вÑоÑое ÑиÑло) игноÑиÑÑеÑÑÑ Ð¸ обÑÑно ÑавнÑеÑÑÑ 1.ÐамеÑÑÑе, ÑÑо пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² лÑбой, кÑоме Ñамой пÑавой, ÑÑÑаниÑе (Ñо еÑÑÑ Ð² лÑбой ÑÑÑаниÑе Ñ Ð½ÐµÐ½ÑлевÑм знаÑением в поле
btpo_next) пÑедÑÑавлÑÐµÑ Ñобой «веÑÑ Ð½Ð¸Ð¹ клÑÑ», Ñо еÑÑÑ ÐµÐ³Ð¾ полеdataзадаÑÑ Ð²ÐµÑÑ Ð½ÑÑ Ð³ÑаниÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ ÑлеменÑов, Ð½Ð°Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑ Ð½Ð° ÑÑÑаниÑе, а полеctidлиÑено ÑмÑÑла. ÐÑоме Ñого, на внÑÑÑÐµÐ½Ð½Ð¸Ñ ÑÑÑаниÑÐ°Ñ Ð¿ÐµÑвÑй дейÑÑвиÑелÑнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð´Ð°Ð½Ð½ÑÑ (пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾Ñле веÑÑ Ð½ÐµÐ³Ð¾ клÑÑа) пÑедÑÑавлÑÐµÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Â«Ð¼Ð¸Ð½ÑÑ Ð±ÐµÑконеÑноÑÑÑ», без ÑакÑиÑеÑкого знаÑÐµÐ½Ð¸Ñ Ð² полеdata. Ðднако Ñакой ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑодеÑÐ¶Ð¸Ñ Ð² ÑвоÑм полеctidкоÑÑекÑнÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° даннÑе.-
brin_page_type(page bytea) returns text ФÑнкÑиÑ
brin_page_typeвозвÑаÑÐ°ÐµÑ Ñип ÑÑÑаниÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑÑаниÑÑ Ð¸Ð½Ð´ÐµÐºÑа BRIN или вÑдаÑÑ Ð¾ÑибкÑ, еÑли ÑÑа ÑÑÑаниÑа не ÑвлÑеÑÑÑ ÐºÐ¾ÑÑекÑной ÑÑÑаниÑей индекÑа BRIN. ÐапÑимеÑ:test=# SELECT brin_page_type(get_raw_page('brinidx', 0)); brin_page_type ---------------- meta-
brin_metapage_info(page bytea) returns record ФÑнкÑиÑ
brin_metapage_infoвозвÑаÑÐ°ÐµÑ ÑазнообÑазнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ меÑаÑÑÑаниÑе индекÑа BRIN. ÐапÑимеÑ:test=# SELECT * FROM brin_metapage_info(get_raw_page('brinidx', 0)); magic | version | pagesperrange | lastrevmappage ------------+---------+---------------+---------------- 0xA8109CFA | 1 | 4 | 2-
brin_revmap_data(page bytea) returns setof tid ФÑнкÑиÑ
brin_revmap_dataвÑдаÑÑ ÑпиÑок иденÑиÑикаÑоÑов коÑÑежей Ñо ÑÑÑаниÑÑ ÑопоÑÑавлений зон индекÑа BRIN. ÐапÑимеÑ:test=# SELECT * FROM brin_revmap_data(get_raw_page('brinidx', 2)) limit 5; pages --------- (6,137) (6,138) (6,139) (6,140) (6,141)-
brin_page_items(page bytea, index oid) returns setof record ФÑнкÑиÑ
brin_page_itemsвÑдаÑÑ ÑодеÑжимое, ÑÐ¾Ñ ÑанÑнное в ÑÑÑаниÑе даннÑÑ BRIN. ÐапÑимеÑ:test=# SELECT * FROM brin_page_items(get_raw_page('brinidx', 5), 'brinidx') ORDER BY blknum, attnum LIMIT 6; itemoffset | blknum | attnum | allnulls | hasnulls | placeholder | value ------------+--------+--------+----------+----------+-------------+-------------- 137 | 0 | 1 | t | f | f | 137 | 0 | 2 | f | f | f | {1 .. 88} 138 | 4 | 1 | t | f | f | 138 | 4 | 2 | f | f | f | {89 .. 176} 139 | 8 | 1 | t | f | f | 139 | 8 | 2 | f | f | f | {177 .. 264}ÐозвÑаÑаемÑе ÑÑолбÑÑ ÑооÑвеÑÑÑвÑÑÑ Ð¿Ð¾Ð»Ñм в ÑÑÑÑкÑÑÑаÑ
BrinMemTupleиBrinValues. ÐодÑобнее они опиÑÐ°Ð½Ñ Ð²src/include/access/brin_tuple.h.-
gin_metapage_info(page bytea) returns record ФÑнкÑиÑ
gin_metapage_infoвÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ меÑаÑÑÑаниÑе индекÑа GIN. ÐапÑимеÑ:test=# SELECT * FROM gin_metapage_info(get_raw_page('gin_index', 0)); -[ RECORD 1 ]----+----------- pending_head | 4294967295 pending_tail | 4294967295 tail_free_size | 0 n_pending_pages | 0 n_pending_tuples | 0 n_total_pages | 7 n_entry_pages | 6 n_data_pages | 0 n_entries | 693 version | 2-
gin_page_opaque_info(page bytea) returns record ФÑнкÑиÑ
gin_page_opaque_infoвÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· непÑозÑаÑной облаÑÑи индекÑа GIN, напÑимеÑ, Ñип ÑÑÑаниÑÑ. ÐапÑимеÑ:test=# SELECT * FROM gin_page_opaque_info(get_raw_page('gin_index', 2)); rightlink | maxoff | flags -----------+--------+------------------------ 5 | 0 | {data,leaf,compressed} (1 row)-
gin_leafpage_items(page bytea) returns setof record ФÑнкÑиÑ
gin_leafpage_itemsвÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ даннÑÑ , Ñ ÑанÑÑÐ¸Ñ ÑÑ Ð² ÑÑÑаниÑе индекÑа GIN на ÑÑовне лиÑÑÑев. ÐапÑимеÑ:test=# SELECT first_tid, nbytes, tids[0:5] as some_tids FROM gin_leafpage_items(get_raw_page('gin_test_idx', 2)); first_tid | nbytes | some_tids -----------+--------+---------------------------------------------------------- (8,41) | 244 | {"(8,41)","(8,43)","(8,44)","(8,45)","(8,46)"} (10,45) | 248 | {"(10,45)","(10,46)","(10,47)","(10,48)","(10,49)"} (12,52) | 248 | {"(12,52)","(12,53)","(12,54)","(12,55)","(12,56)"} (14,59) | 320 | {"(14,59)","(14,60)","(14,61)","(14,62)","(14,63)"} (167,16) | 376 | {"(167,16)","(167,17)","(167,18)","(167,19)","(167,20)"} (170,30) | 376 | {"(170,30)","(170,31)","(170,32)","(170,33)","(170,34)"} (173,44) | 197 | {"(173,44)","(173,45)","(173,46)","(173,47)","(173,48)"} (7 rows)-
fsm_page_contents(page bytea) returns text ФÑнкÑиÑ
fsm_page_contentsпоказÑÐ²Ð°ÐµÑ Ð²Ð½ÑÑÑеннÑÑ ÑÑÑÑкÑÑÑÑ Ñзла на ÑÑÑаниÑе FSM. Ðна вÑдаÑÑ ÑекÑÑ Ð¸Ð· неÑколÑÐºÐ¸Ñ ÑÑÑок, по одной ÑÑÑоке на Ñзел двоиÑного деÑева на заданной ÑÑÑаниÑе. ÐÑи ÑÑом вÑдаÑÑÑÑ ÑолÑко ненÑлевÑе ÑзлÑ. Также вÑводиÑÑÑ Ñак назÑваемÑй ÑказаÑÐµÐ»Ñ Â«ÑледÑÑÑего ÑлоÑа», коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÑледÑÑÑий ÑлоÑ, полÑÑаемÑй Ñ ÑÑой ÑÑÑаниÑÑ.