F.33. pageinspect
- F.33.1. ФÑнкÑии обÑего назнаÑениÑ
- F.33.2. ФÑнкÑии Ð´Ð»Ñ Ð¸ÑÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÑÑи
- F.33.3. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов-B-деÑевÑев
- F.33.4. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов BRIN
- F.33.5. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов GIN
- F.33.6. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов GiST
- F.33.7. ФÑнкÑии Ð´Ð»Ñ Ñ ÐµÑ-индекÑов
- F.33.2. ФÑнкÑии Ð´Ð»Ñ Ð¸ÑÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÑÑи
ÐодÑÐ»Ñ pageinspect пÑедоÑÑавлÑÐµÑ ÑÑнкÑии, позволÑÑÑие иÑÑледоваÑÑ ÑÑÑаниÑÑ Ð±Ð°Ð· даннÑÑ
на низком ÑÑовне, ÑÑо бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð¾Ñладки. ÐÑе ÑÑи ÑÑнкÑии могÑÑ Ð²ÑзÑваÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели.
F.33.1. ФÑнкÑии обÑего назнаÑениÑ
-
get_raw_page(relname text, fork text, blkno bigint) returns bytea ФÑнкÑиÑ
get_raw_pageÑÑиÑÑÐ²Ð°ÐµÑ ÑказаннÑй блок оÑноÑÐµÐ½Ð¸Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм именем и возвÑаÑÐ°ÐµÑ ÐºÐ¾Ð¿Ð¸Ñ Ð·Ð½Ð°ÑениÑbytea. ÐÑо позволÑÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¾Ð´Ð½Ñ ÑоглаÑованнÑÑ Ð²Ð¾ вÑемени ÐºÐ¾Ð¿Ð¸Ñ Ð±Ð»Ð¾ÐºÐ°. РпаÑамеÑÑеforkнÑжно пеÑедаÑÑ'main', ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº оÑÐ½Ð¾Ð²Ð½Ð¾Ð¼Ñ ÑÐ»Ð¾Ñ Ð´Ð°Ð½Ð½ÑÑ ,'fsm'â к каÑÑе Ñвободного пÑоÑÑÑанÑÑва,'vm'â к каÑÑе видимоÑÑи, либо'init'â к ÑÐ»Ð¾Ñ Ð¸Ð½Ð¸ÑиализаÑии.-
get_raw_page(relname text, blkno bigint) 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 | 0 | 1 | 232 | 368 | 8192 | 8192 | 4 | 0ÐозвÑаÑаемÑе ÑÑолбÑÑ ÑооÑвеÑÑÑвÑÑÑ Ð¿Ð¾Ð»Ñм в ÑÑÑÑкÑÑÑе
PageHeaderData.Ðоле
checksumÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑÑммÑ, ÑÐ¾Ñ ÑанÑннÑÑ Ð´Ð»Ñ ÑÑÑаниÑÑ. ÐÑа ÑÑмма Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ²ÐµÑной пÑи повÑеждении ÑÑÑаниÑÑ. ÐÑли в данном ÑкземплÑÑе клаÑÑеÑа конÑÑолÑнÑе ÑÑÐ¼Ð¼Ñ Ð¾ÑклÑÑенÑ, ÑÑо знаÑение не Ð¸Ð¼ÐµÐµÑ ÑмÑÑла.-
page_checksum(page bytea, blkno bigint) returns smallint ФÑнкÑиÑ
page_checksumвÑÑиÑлÑÐµÑ ÐºÐ¾Ð½ÑÑолÑнÑÑ ÑÑÐ¼Ð¼Ñ ÑÑÑаниÑÑ, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑла Ð±Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² заданном блоке.РкаÑеÑÑве аÑгÑменÑа ей пеÑедаÑÑÑÑ Ð¾Ð±Ñаз ÑÑÑаниÑÑ, полÑÑеннÑй в ÑезÑлÑÑаÑе вÑзова
get_raw_page. ÐапÑимеÑ:test=# SELECT page_checksum(get_raw_page('pg_class', 0), 0); page_checksum --------------- 13443ÐамеÑÑÑе, ÑÑо вÑÑиÑление конÑÑолÑной ÑÑÐ¼Ð¼Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð½Ð¾Ð¼ÐµÑа блока, поÑÑÐ¾Ð¼Ñ Ð¾Ð±ÐµÐ¸Ð¼ ÑÑнкÑиÑм нÑжно пеÑедаваÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе номеÑа (за иÑклÑÑением ÑлÑÑаев ÑзоÑеÑиÑеÑкой оÑладки).
ÐонÑÑолÑнÑÑ ÑÑммÑ, вÑÑиÑленнÑÑ ÑÑой ÑÑнкÑией, можно ÑÑавниÑÑ Ñ Ð¿Ð¾Ð»ÐµÐ¼
checksumÑезÑлÑÑаÑа ÑÑнкÑииpage_header. ÐÑли конÑÑолÑнÑе ÑÑÐ¼Ð¼Ñ Ð´Ð»Ñ ÑекÑÑего ÑкземплÑÑа ÐРвклÑÑенÑ, ÑÑи знаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑавнÑ.-
fsm_page_contents(page bytea) returns text ФÑнкÑиÑ
fsm_page_contentsпоказÑÐ²Ð°ÐµÑ Ð²Ð½ÑÑÑеннÑÑ ÑÑÑÑкÑÑÑÑ Ñзла на ÑÑÑаниÑе FSM. ÐапÑимеÑ:test=# SELECT fsm_page_contents(get_raw_page('pg_class', 'fsm', 0));ÐаннÑй запÑÐ¾Ñ Ð²ÑÐ²Ð¾Ð´Ð¸Ñ Ð½ÐµÑколÑко ÑекÑÑовÑÑ ÑÑÑок, по одной ÑÑÑоке Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñзла двоиÑного деÑева на заданной ÑÑÑаниÑе. ÐÑлевÑе ÑÐ·Ð»Ñ Ð¿Ñи ÑÑом пÑопÑÑкаÑÑÑÑ. Также вÑводиÑÑÑ Ñак назÑваемÑй ÑказаÑÐµÐ»Ñ Â«Ð²Ð¿ÐµÑÑд», коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÑледÑÑÑий ÑлоÑ, полÑÑаемÑй Ñ ÑÑой ÑÑÑаниÑÑ.
F.33.2. ФÑнкÑии Ð´Ð»Ñ Ð¸ÑÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÑÑи
-
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));РаÑпаковаÑÑ Ð±Ð¸ÑÑ Ñлагов
t_infomaskиt_infomask2Ð´Ð»Ñ ÐºÐ¾ÑÑежей кÑÑи позволÑÐµÑ ÑÑнкÑиÑheap_tuple_infomask_flags.-
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);-
heap_tuple_infomask_flags(t_infomask integer, t_infomask2 integer) returns record heap_tuple_infomask_flagsдекодиÑÑÐµÑ Ð·Ð½Ð°ÑениÑt_infomaskиt_infomask2, коÑоÑÑе возвÑаÑÐ°ÐµÑ ÑÑнкÑиÑheap_page_items, и вÑдаÑÑ Ð¼Ð°ÑÑÐ¸Ð²Ñ Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ Ñлагов в понÑÑном ÑÐµÐ»Ð¾Ð²ÐµÐºÑ Ð²Ð¸Ð´Ðµ: один, пеÑеÑиÑлÑÑÑий вÑе Ñлаги по оÑделÑноÑÑи, а дÑÑгой â комбиниÑованнÑе. ÐапÑимеÑ:test=# SELECT t_ctid, raw_flags, combined_flags FROM heap_page_items(get_raw_page('pg_class', 0)), LATERAL heap_tuple_infomask_flags(t_infomask, t_infomask2) WHERE t_infomask IS NOT NULL OR t_infomask2 IS NOT NULL;ÐÑзÑÐ²Ð°Ñ ÑÑÑ ÑÑнкÑиÑ, ей ÑледÑÐµÑ Ð¿ÐµÑедаваÑÑ Ð² аÑгÑменÑÐ°Ñ Ñе аÑÑибÑÑÑ, коÑоÑÑе возвÑаÑаеÑ
heap_page_items.ÐомбиниÑованнÑе Ñлаги вÑводÑÑÑÑ Ð´Ð»Ñ ÑÐµÑ Ð¼Ð°ÐºÑоÑов на ÑÑовне иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода, в коÑоÑÑÑ Ð¾Ð±ÑединÑÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð½ÐµÑколÑÐºÐ¸Ñ Ð±Ð¸Ñов, напÑимеÑ
HEAP_XMIN_FROZEN.
F.33.3. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов-B-деÑевÑев
-
bt_metap(relname text) returns record bt_metapвÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ меÑаÑÑÑаниÑе индекÑа B-деÑево. ÐапÑимеÑ:test=# SELECT * FROM bt_metap('pg_cast_oid_index'); -[ RECORD 1 ]-------------+------- magic | 340322 version | 4 root | 1 level | 0 fastroot | 1 fastlevel | 0 last_cleanup_num_delpages | 0 last_cleanup_num_tuples | 230 allequalimage | f-
bt_page_stats(relname text, blkno bigint) 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 | 224 dead_items | 0 avg_item_size | 16 page_size | 8192 free_size | 3668 btpo_prev | 0 btpo_next | 0 btpo_level | 0 btpo_flags | 3-
bt_page_items(relname text, blkno bigint) returns setof record bt_page_itemsвÑдаÑÑ Ð¿Ð¾Ð´ÑобнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð±Ð¾ вÑÐµÑ ÑлеменÑÐ°Ñ Ð½Ð° ÑÑÑаниÑе индекÑа B-деÑево. ÐапÑимеÑ:test=# SELECT itemoffset, ctid, itemlen, nulls, vars, data, dead, htid, tids[0:2] AS some_tids FROM bt_page_items('tenk2_hundred', 5); itemoffset | ctid | itemlen | nulls | vars | data | dead | htid | some_tids ------------+-----------+---------+-------+------+-------------------------+------+--------+--------------------- 1 | (16,1) | 16 | f | f | 30 00 00 00 00 00 00 00 | | | 2 | (16,8292) | 616 | f | f | 24 00 00 00 00 00 00 00 | f | (1,6) | {"(1,6)","(10,22)"} 3 | (16,8292) | 616 | f | f | 25 00 00 00 00 00 00 00 | f | (1,18) | {"(1,18)","(4,22)"} 4 | (16,8292) | 616 | f | f | 26 00 00 00 00 00 00 00 | f | (4,18) | {"(4,18)","(6,17)"} 5 | (16,8292) | 616 | f | f | 27 00 00 00 00 00 00 00 | f | (1,2) | {"(1,2)","(1,19)"} 6 | (16,8292) | 616 | f | f | 28 00 00 00 00 00 00 00 | f | (2,24) | {"(2,24)","(4,11)"} 7 | (16,8292) | 616 | f | f | 29 00 00 00 00 00 00 00 | f | (2,17) | {"(2,17)","(11,2)"} 8 | (16,8292) | 616 | f | f | 2a 00 00 00 00 00 00 00 | f | (0,25) | {"(0,25)","(3,20)"} 9 | (16,8292) | 616 | f | f | 2b 00 00 00 00 00 00 00 | f | (0,10) | {"(0,10)","(0,14)"} 10 | (16,8292) | 616 | f | f | 2c 00 00 00 00 00 00 00 | f | (1,3) | {"(1,3)","(3,9)"} 11 | (16,8292) | 616 | f | f | 2d 00 00 00 00 00 00 00 | f | (6,28) | {"(6,28)","(11,1)"} 12 | (16,8292) | 616 | f | f | 2e 00 00 00 00 00 00 00 | f | (0,27) | {"(0,27)","(1,13)"} 13 | (16,8292) | 616 | f | f | 2f 00 00 00 00 00 00 00 | f | (4,17) | {"(4,17)","(4,21)"} (13 rows)ÐÑо лиÑÑÐ¾Ð²Ð°Ñ ÑÑÑаниÑа B-деÑева. Рней вÑе коÑÑежи, оÑноÑÑÑиеÑÑ Ðº ÑаблиÑе, оказалиÑÑ ÐºÐ¾ÑÑежами Ñо ÑпиÑками иденÑиÑикаÑоÑов (каждÑй ÑодеÑÐ¶Ð¸Ñ 100 ÑеÑÑибайÑнÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов). Ðомимо Ð½Ð¸Ñ , по ÑмеÑениÑ
itemoffset1 Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ ÐºÐ¾ÑÑеж «веÑÑ Ð½Ð¸Ð¹ клÑÑ». Рданном пÑимеÑеctidÑодеÑÐ¶Ð¸Ñ Ð·Ð°ÐºÐ¾Ð´Ð¸ÑованнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ каждом коÑÑеже, Ñ Ð¾ÑÑ Ð½Ð° ÑÑовне лиÑÑÑев запиÑи ÑаÑÑо ÑодеÑÐ¶Ð°Ñ Ð²ctidнепоÑÑедÑÑвенно TID кÑÑи. ÐtidsÑодеÑжаÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑÑ (TID) в виде ÑпиÑка иденÑиÑикаÑоÑов.Ðа внÑÑÑенней ÑÑÑаниÑе (она здеÑÑ Ð½Ðµ показана), ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð½Ð¾Ð¼ÐµÑа блока в
ctidÑодеÑÐ¶Ð¸Ñ Â«ÑÑÑÐ»ÐºÑ Ð²Ð½Ð¸Ð·Â», Ñо еÑÑÑ Ð½Ð¾Ð¼ÐµÑ Ð±Ð»Ð¾ÐºÐ° дÑÑгой ÑÑÑаниÑÑ Ð² Ñамом индекÑе. ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÑмеÑÐµÐ½Ð¸Ñ (вÑоÑое ÑиÑло) вctidÑодеÑÐ¶Ð¸Ñ Ð·Ð°ÐºÐ¾Ð´Ð¸ÑованнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ коÑÑеже, в ÑаÑÑноÑÑи, колиÑеÑÑво ÑÑолбÑов в нÑм (пÑи оÑÑеÑении ÑÑÑÑикÑа ненÑжнÑе конеÑнÑе ÑÑолбÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¾ÑбÑоÑенÑ). Ðогда ÑÑолбÑÑ Ð¾ÑбÑаÑÑваÑÑÑÑ, ÑÑиÑаеÑÑÑ, ÑÑо они ÑодеÑÐ¶Ð°Ñ Ð·Ð½Ð°Ñение «минÑÑ Ð±ÐµÑконеÑноÑÑÑ».Ð ÑÑолбÑе
htidпоказÑваеÑÑÑ TID коÑÑежа в кÑÑе, вне завиÑимоÑÑи Ð¾Ñ ÐµÐ³Ð¾ нижележаÑего пÑедÑÑавлениÑ. ÐÑо знаÑение должно ÑовпадаÑÑ Ñctidили Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´ÐµÐºÐ¾Ð´Ð¸Ñовано из алÑÑеÑнаÑивного пÑедÑÑавлениÑ, пÑименÑÑÑегоÑÑ Ð² ÑпиÑÐºÐ°Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов и в коÑÑÐµÐ¶Ð°Ñ Ð½Ð° внÑÑÑÐµÐ½Ð½Ð¸Ñ ÑÑÑаниÑÐ°Ñ . РкоÑÑÐµÐ¶Ð°Ñ Ð½Ð° внÑÑÑÐµÐ½Ð½Ð¸Ñ ÑÑÑаниÑÐ°Ñ ÑÑÐ¾Ð»Ð±ÐµÑ Ñ TID кÑÑи на ÑÑовне ÑеализаÑии обÑÑно оÑÑÑÑÑÑвÑеÑ, ÑÑо вÑглÑÐ´Ð¸Ñ ÐºÐ°Ðº знаÑение NULL в ÑÑолбÑеhtid.ÐамеÑÑÑе, ÑÑо пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² лÑбой, кÑоме Ñамой пÑавой, ÑÑÑаниÑе (Ñо еÑÑÑ Ð² лÑбой ÑÑÑаниÑе Ñ Ð½ÐµÐ½ÑлевÑм знаÑением в поле
btpo_next) пÑедÑÑавлÑÐµÑ Ñобой «веÑÑ Ð½Ð¸Ð¹ клÑÑ», Ñо еÑÑÑ ÐµÐ³Ð¾ полеdataзадаÑÑ Ð²ÐµÑÑ Ð½ÑÑ Ð³ÑаниÑÑ Ð´Ð»Ñ Ð²ÑÐµÑ ÑлеменÑов, Ð½Ð°Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑ Ð½Ð° ÑÑÑаниÑе, а полеctidне ÑказÑÐ²Ð°ÐµÑ Ð½Ð° дÑÑгой блок. ÐÑоме Ñого, на внÑÑÑÐµÐ½Ð½Ð¸Ñ ÑÑÑаниÑÐ°Ñ Ð² пеÑвом дейÑÑвиÑелÑном ÑлеменÑе даннÑÑ (в пеÑвом ÑлеменÑе поÑле веÑÑ Ð½ÐµÐ³Ð¾ клÑÑа) обÑзаÑелÑно бÑдÑÑ Ð¾ÑбÑоÑÐµÐ½Ñ Ð²Ñе ÑÑолбÑÑ, и поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð»Ðµdataне бÑÐ´ÐµÑ ÑодеÑжаÑÑ ÑакÑиÑеÑкого знаÑениÑ. Ðднако Ñакой ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑодеÑÐ¶Ð¸Ñ Ð² ÑвоÑм полеctidкоÑÑекÑнÑÑ ÑÑÑÐ»ÐºÑ Ð²Ð½Ð¸Ð·.Ðа дополниÑелÑной инÑоÑмаÑией о ÑÑÑÑкÑÑÑе индекÑов-B-деÑевÑев обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 61.4.1. Ðб иÑклÑÑении дÑбликаÑов и о ÑпиÑÐºÐ°Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов подÑобнее ÑаÑÑказÑваеÑÑÑ Ð² ÐодÑазделе 61.4.3.
-
bt_page_items(page bytea) returns setof record ФÑнкÑии
bt_page_itemsÑакже можно пеÑедаÑÑ ÑÑÑаниÑÑ Ð² виде знаÑениÑbytea. ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ð±Ñаза ÑÑÑаниÑÑ, коÑоÑÑй она Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинÑÑÑ, ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑнкÑиÑget_raw_page. Так, поÑледний пÑÐ¸Ð¼ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ пеÑепиÑаÑÑ ÑледÑÑÑим обÑазом:test=# SELECT itemoffset, ctid, itemlen, nulls, vars, data, dead, htid, tids[0:2] AS some_tids FROM bt_page_items(get_raw_page('tenk2_hundred', 5)); itemoffset | ctid | itemlen | nulls | vars | data | dead | htid | some_tids ------------+-----------+---------+-------+------+-------------------------+------+--------+--------------------- 1 | (16,1) | 16 | f | f | 30 00 00 00 00 00 00 00 | | | 2 | (16,8292) | 616 | f | f | 24 00 00 00 00 00 00 00 | f | (1,6) | {"(1,6)","(10,22)"} 3 | (16,8292) | 616 | f | f | 25 00 00 00 00 00 00 00 | f | (1,18) | {"(1,18)","(4,22)"} 4 | (16,8292) | 616 | f | f | 26 00 00 00 00 00 00 00 | f | (4,18) | {"(4,18)","(6,17)"} 5 | (16,8292) | 616 | f | f | 27 00 00 00 00 00 00 00 | f | (1,2) | {"(1,2)","(1,19)"} 6 | (16,8292) | 616 | f | f | 28 00 00 00 00 00 00 00 | f | (2,24) | {"(2,24)","(4,11)"} 7 | (16,8292) | 616 | f | f | 29 00 00 00 00 00 00 00 | f | (2,17) | {"(2,17)","(11,2)"} 8 | (16,8292) | 616 | f | f | 2a 00 00 00 00 00 00 00 | f | (0,25) | {"(0,25)","(3,20)"} 9 | (16,8292) | 616 | f | f | 2b 00 00 00 00 00 00 00 | f | (0,10) | {"(0,10)","(0,14)"} 10 | (16,8292) | 616 | f | f | 2c 00 00 00 00 00 00 00 | f | (1,3) | {"(1,3)","(3,9)"} 11 | (16,8292) | 616 | f | f | 2d 00 00 00 00 00 00 00 | f | (6,28) | {"(6,28)","(11,1)"} 12 | (16,8292) | 616 | f | f | 2e 00 00 00 00 00 00 00 | f | (0,27) | {"(0,27)","(1,13)"} 13 | (16,8292) | 616 | f | f | 2f 00 00 00 00 00 00 00 | f | (4,17) | {"(4,17)","(4,21)"} (13 rows)РоÑÑалÑном Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ ÑабоÑÐ°ÐµÑ Ñак, как опиÑано вÑÑе.
F.33.4. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов BRIN
-
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.
F.33.5. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов GIN
-
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)
F.33.6. ФÑнкÑии Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов GiST
-
gist_page_opaque_info(page bytea) returns record ФÑнкÑиÑ
gist_page_opaque_infoвÑдаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· непÑозÑаÑной облаÑÑи ÑÑÑаниÑÑ Ð¸Ð½Ð´ÐµÐºÑа GiST, напÑÐ¸Ð¼ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ NSN, rightlink и Ñип ÑÑÑаниÑÑ. ÐапÑимеÑ:test=# SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2)); lsn | nsn | rightlink | flags -----+-----+-----------+-------- 0/1 | 0/0 | 1 | {leaf} (1 row)-
gist_page_items(page bytea, index_oid regclass) returns setof record ФÑнкÑиÑ
gist_page_itemsвозвÑаÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ даннÑÑ , Ñ ÑанÑÑÐ¸Ñ ÑÑ Ð½Ð° ÑÑÑаниÑе индекÑа GiST. ÐапÑимеÑ:test=# SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx'); itemoffset | ctid | itemlen | dead | keys ------------+-----------+---------+------+------------------------------- 1 | (1,65535) | 40 | f | (p)=("(166,166),(1,1)") 2 | (2,65535) | 40 | f | (p)=("(332,332),(167,167)") 3 | (3,65535) | 40 | f | (p)=("(498,498),(333,333)") 4 | (4,65535) | 40 | f | (p)=("(664,664),(499,499)") 5 | (5,65535) | 40 | f | (p)=("(830,830),(665,665)") 6 | (6,65535) | 40 | f | (p)=("(996,996),(831,831)") 7 | (7,65535) | 40 | f | (p)=("(1000,1000),(997,997)") (7 rows)-
gist_page_items_bytea(page bytea) returns setof record ФÑнкÑÐ¸Ñ ÑабоÑÐ°ÐµÑ Ñак же, как
gist_page_items, но возвÑаÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе клÑÑа в виде неÑазобÑаннÑÑ Ð´Ð²Ð¾Ð¸ÑнÑÑ Ð´Ð°Ð½Ð½ÑÑbytea. ÐоÑколÑÐºÑ Ð¾Ð½Ð° не пÑÑаеÑÑÑ Ð´ÐµÐºÐ¾Ð´Ð¸ÑоваÑÑ ÐºÐ»ÑÑ, ей не ÑÑебÑеÑÑÑ Ð·Ð½Ð°ÑÑ, какой Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвован. ÐапÑимеÑ:test=# SELECT * FROM gist_page_items_bytea(get_raw_page('test_gist_idx', 0)); itemoffset | ctid | itemlen | dead | key_data ------------+-----------+---------+------+-----------------------------------------â------------------------------------------- 1 | (1,65535) | 40 | f | \x00000100ffff28000000000000c0644000000000â00c06440000000000000f03f000000000000f03f 2 | (2,65535) | 40 | f | \x00000200ffff28000000000000c0744000000000â00c074400000000000e064400000000000e06440 3 | (3,65535) | 40 | f | \x00000300ffff28000000000000207f4000000000â00207f400000000000d074400000000000d07440 4 | (4,65535) | 40 | f | \x00000400ffff28000000000000c0844000000000â00c084400000000000307f400000000000307f40 5 | (5,65535) | 40 | f | \x00000500ffff28000000000000f0894000000000â00f089400000000000c884400000000000c88440 6 | (6,65535) | 40 | f | \x00000600ffff28000000000000208f4000000000â00208f400000000000f889400000000000f88940 7 | (7,65535) | 40 | f | \x00000700ffff28000000000000408f4000000000â00408f400000000000288f400000000000288f40 (7 rows)
F.33.7. ФÑнкÑии Ð´Ð»Ñ Ñ ÐµÑ-индекÑов
-
hash_page_type(page bytea) returns text ФÑнкÑиÑ
hash_page_typeвозвÑаÑÐ°ÐµÑ Ñип ÑÑÑаниÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑÑаниÑÑ Ñ ÐµÑ-индекÑа. ÐапÑимеÑ:test=# SELECT hash_page_type(get_raw_page('con_hash_index', 0)); hash_page_type ---------------- metapage-
hash_page_stats(page bytea) returns setof record ФÑнкÑиÑ
hash_page_statsвозвÑаÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑÑÑаниÑе гÑÑÐ¿Ð¿Ñ Ð¸Ð»Ð¸ пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ ÐµÑ-индекÑа. ÐапÑимеÑ:test=# SELECT * FROM hash_page_stats(get_raw_page('con_hash_index', 1)); -[ RECORD 1 ]---+----------- live_items | 407 dead_items | 0 page_size | 8192 free_size | 8 hasho_prevblkno | 4096 hasho_nextblkno | 8474 hasho_bucket | 0 hasho_flag | 66 hasho_page_id | 65408-
hash_page_items(page bytea) returns setof record ФÑнкÑиÑ
hash_page_itemsвозвÑаÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ даннÑÑ , Ñ ÑанÑÑÐ¸Ñ ÑÑ Ð½Ð° ÑÑÑаниÑе гÑÑÐ¿Ð¿Ñ Ð¸Ð»Ð¸ пеÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ ÐµÑ-индекÑа. ÐапÑимеÑ:test=# SELECT * FROM hash_page_items(get_raw_page('con_hash_index', 1)) LIMIT 5; itemoffset | ctid | data ------------+-----------+------------ 1 | (899,77) | 1053474816 2 | (897,29) | 1053474816 3 | (894,207) | 1053474816 4 | (892,159) | 1053474816 5 | (890,111) | 1053474816-
hash_bitmap_info(index oid, blkno bigint) returns record ФÑнкÑиÑ
hash_bitmap_infoпоказÑÐ²Ð°ÐµÑ ÑоÑÑоÑние биÑа в ÑÑÑаниÑе биÑовой каÑÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑеделÑнной ÑÑÑаниÑÑ Ð¿ÐµÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ ÐµÑ-индекÑа. ÐапÑимеÑ:test=# SELECT * FROM hash_bitmap_info('con_hash_index', 2052); bitmapblkno | bitmapbit | bitstatus -------------+-----------+----------- 65 | 3 | t-
hash_metapage_info(page bytea) returns record hash_metapage_infoвозвÑаÑÐ°ÐµÑ Ð¸Ð½ÑоÑмаÑиÑ, Ñ ÑанÑÑÑÑÑÑ Ð² меÑаÑÑÑаниÑе Ñ ÐµÑ-индекÑа. ÐапÑимеÑ:test=# SELECT magic, version, ntuples, ffactor, bsize, bmsize, bmshift, test-# maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, test-# regexp_replace(spares::text, '(,0)*}', '}') as spares, test-# regexp_replace(mapp::text, '(,0)*}', '}') as mapp test-# FROM hash_metapage_info(get_raw_page('con_hash_index', 0)); -[ RECORD 1 ]-------------------------------------------------â------------------------------ magic | 105121344 version | 4 ntuples | 500500 ffactor | 40 bsize | 8152 bmsize | 4096 bmshift | 15 maxbucket | 12512 highmask | 16383 lowmask | 8191 ovflpoint | 28 firstfree | 1204 nmaps | 1 procid | 450 spares | {0,0,0,0,0,0,1,1,1,1,1,1,1,1,3,4,4,4,45,55,58,59,â508,567,628,704,1193,1202,1204} mapp | {65}