pageinspect

The pageinspect module provides functions for low level inspection of the contents of database pages. pageinspect is available only to LightDB-A Database superusers.

The LightDB-A Database pageinspect module is based on the PostgreSQL pageinspect module. The LightDB-A version of the module differs as described in the LightDB-A Database Considerations topic.

Installing and Registering the Module

The pageinspect module is installed when you install LightDB-A Database. Before you can use any of the functions defined in the module, you must register the pageinspect extension in each database in which you want to use the functions:

CREATE EXTENSION pageinspect;

Refer to Installing Additional Supplied Modules for more information.

Upgrading the Module

If you are currently using pageinspect in your LightDB-A installation and you want to access newly-released module functionality, you must update the pageinspect extension in every database in which it is currently registered:

ALTER EXTENSION pageinspect UPDATE;

Module Documentation

See pageinspect in the PostgreSQL documentation for detailed information about the majority of functions in this module.

The next topic includes documentation for LightDB-A-added pageinspect functions.

LightDB-A Database Considerations

When using this module with LightDB-A Database, consider the following:

  • The LightDB-A Database version of the pageinspect does not allow inspection of pages belonging to append-optimized or external relations.
  • For pageinspect functions that read data from a database, the function reads data only from the segment instance where the function is run. For example, the get_raw_page() function returns a block number out of range error when you try to read data from a user-defined table on the LightDB-A Database coordinator because there is no data in the table on the coordinator segment. The function will read data from a system catalog table on the coordinator segment.

LightDB-A-Added Functions

In addition to the functions specified in the PostgreSQL documentation, LightDB-A Database provides these additional pageinspect functions for inspecting bitmap index pages:

Function Name Description
bm_metap(relname text) returns record Returns information about a bitmap index’s meta page.
bm_bitmap_page_header(relname text, blkno int) returns record Returns the header information for a bitmap page; this corresponds to the opaque section from the page header.
bm_lov_page_items(relname text, blkno int) returns setof record Returns the list of value (LOV) items present in a bitmap LOV page.
bm_bitmap_page_items(relname text, blkno int) returns setof record Returns the content words and their compression statuses for a bitmap page.
bm_bitmap_page_items(page bytea) returns setof record Returns the content words and their compression statuses for a page image obtained by get_raw_page().

Examples

LightDB-A-added pageinspect function usage examples follow.

Obtain information about the meta page of the bitmap index named i1:

testdb=# SELECT * FROM bm_metap('i1');
   magic    | version | auxrelid | auxindexrelid | lovlastblknum
------------+---------+----------+---------------+---------------
 1112101965 |       2 |   169980 |        169982 |             1
(1 row)

Display the header information for the second block of the bitmap index named i1:

testdb=# SELECT * FROM bm_bitmap_page_header('i1', 2);
 num_words | next_blkno | last_tid 
-----------+------------+----------
 3         | 4294967295 | 65536    
(1 row)

Display the LOV items located in the first block of the bitmap index named i1:

testdb=# SELECT * FROM bm_lov_page_items('i1', 1) ORDER BY itemoffset;
 itemoffset | lov_head_blkno | lov_tail_blkno | last_complete_word      | last_word               | last_tid | last_setbit_tid | is_last_complete_word_fill | is_last_word_fill 
------------+----------------+----------------+-------------------------+-------------------------+----------+-----------------+----------------------------+-------------------
 1          | 4294967295     | 4294967295     | ff ff ff ff ff ff ff ff | 00 00 00 00 00 00 00 00 | 0        | 0               | f                          | f                 
 2          | 2              | 2              | 80 00 00 00 00 00 00 01 | 00 00 00 00 07 ff ff ff | 65600    | 65627           | t                          | f                 
 3          | 3              | 3              | 80 00 00 00 00 00 00 02 | 00 3f ff ff ff ff ff ff | 131200   | 131254          | t                          | f                 
(3 rows)

Return the content words located in the second block of the bitmap index named i1:

testdb=# SELECT * FROM bm_bitmap_page_items('i1', 2) ORDER BY word_num;
 word_num | compressed | content_word            
----------+------------+-------------------------
 0        | t          | 80 00 00 00 00 00 00 0e 
 1        | f          | 00 00 00 00 00 00 1f ff 
 2        | t          | 00 00 00 00 00 00 03 f1 
(3 rows)

Alternatively, return the content words located in the heap page image of the same bitmap index and block:

testdb=# SELECT * FROM bm_bitmap_page_items(get_raw_page('i1', 2)) ORDER BY word_num;
 word_num | compressed | content_word            
----------+------------+-------------------------
 0        | t          | 80 00 00 00 00 00 00 0e 
 1        | f          | 00 00 00 00 00 00 1f ff 
 2        | t          | 00 00 00 00 00 00 03 f1 
(3 rows)