From ebc0f5e01d2f4b7d7c3307fd4d40498f6b120898 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 12 Mar 2015 14:18:26 -0400 Subject: [PATCH] Improve documentation of bt_page_items(). Explain some of the funny conventions used in btree page items. Peter Geoghegan and Jeff Janes --- doc/src/sgml/pageinspect.sgml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/pageinspect.sgml b/doc/src/sgml/pageinspect.sgml index 6f51dc682d..313cbaea30 100644 --- a/doc/src/sgml/pageinspect.sgml +++ b/doc/src/sgml/pageinspect.sgml @@ -192,6 +192,21 @@ test=# SELECT * FROM bt_page_items('pg_cast_oid_index', 1); 7 | (0,7) | 12 | f | f | 29 27 00 00 8 | (0,8) | 12 | f | f | 2a 27 00 00 + In a B-tree leaf page, ctid points to a heap tuple. + In an internal page, the block number part of ctid + points to another page in the index itself, while the offset part + (the second number) is ignored and is usually 1. + + + Note that the first item on any non-rightmost page (any page with + a non-zero value in the btpo_next field) is the + page's high key, meaning its data + serves as an upper bound on all items appearing on the page, while + its ctid field is meaningless. Also, on non-leaf + pages, the first real data item (the first item that is not a high + key) is a minus infinity item, with no actual value + in its data field. Such an item does have a valid + downlink in its ctid field, however. @@ -369,8 +384,7 @@ test=# SELECT * FROM gin_page_opaque_info(get_raw_page('gin_index', 2)); 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 - + 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)"} -- 2.40.0