CREATE TABLE test_hash (a int, b text); INSERT INTO test_hash VALUES (1, 'one'); CREATE INDEX test_hash_a_idx ON test_hash USING hash (a); \x SELECT hash_page_type(get_raw_page('test_hash_a_idx', 0)); -[ RECORD 1 ]--+--------- hash_page_type | metapage SELECT hash_page_type(get_raw_page('test_hash_a_idx', 1)); -[ RECORD 1 ]--+------- hash_page_type | bucket SELECT hash_page_type(get_raw_page('test_hash_a_idx', 2)); -[ RECORD 1 ]--+------- hash_page_type | bucket SELECT hash_page_type(get_raw_page('test_hash_a_idx', 3)); -[ RECORD 1 ]--+------- hash_page_type | bucket SELECT hash_page_type(get_raw_page('test_hash_a_idx', 4)); -[ RECORD 1 ]--+------- hash_page_type | bucket SELECT hash_page_type(get_raw_page('test_hash_a_idx', 5)); -[ RECORD 1 ]--+------- hash_page_type | bitmap SELECT hash_page_type(get_raw_page('test_hash_a_idx', 6)); ERROR: block number 6 is out of range for relation "test_hash_a_idx" SELECT * FROM hash_bitmap_info('test_hash_a_idx', -1); ERROR: invalid block number SELECT * FROM hash_bitmap_info('test_hash_a_idx', 0); ERROR: invalid overflow block number 0 SELECT * FROM hash_bitmap_info('test_hash_a_idx', 1); ERROR: invalid overflow block number 1 SELECT * FROM hash_bitmap_info('test_hash_a_idx', 2); ERROR: invalid overflow block number 2 SELECT * FROM hash_bitmap_info('test_hash_a_idx', 3); ERROR: invalid overflow block number 3 SELECT * FROM hash_bitmap_info('test_hash_a_idx', 4); ERROR: invalid overflow block number 4 SELECT * FROM hash_bitmap_info('test_hash_a_idx', 5); ERROR: invalid overflow block number 5 SELECT * FROM hash_bitmap_info('test_hash_a_idx', 6); ERROR: block number 6 is out of range for relation "test_hash_a_idx" SELECT magic, version, ntuples, bsize, bmsize, bmshift, maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, spares, mapp FROM hash_metapage_info(get_raw_page('test_hash_a_idx', 0)); -[ RECORD 1 ]-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- magic | 105121344 version | 4 ntuples | 1 bsize | 8152 bmsize | 4096 bmshift | 15 maxbucket | 3 highmask | 7 lowmask | 3 ovflpoint | 2 firstfree | 0 nmaps | 1 procid | 450 spares | {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} mapp | {5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} SELECT magic, version, ntuples, bsize, bmsize, bmshift, maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, spares, mapp FROM hash_metapage_info(get_raw_page('test_hash_a_idx', 1)); ERROR: page is not a hash meta page SELECT magic, version, ntuples, bsize, bmsize, bmshift, maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, spares, mapp FROM hash_metapage_info(get_raw_page('test_hash_a_idx', 2)); ERROR: page is not a hash meta page SELECT magic, version, ntuples, bsize, bmsize, bmshift, maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, spares, mapp FROM hash_metapage_info(get_raw_page('test_hash_a_idx', 3)); ERROR: page is not a hash meta page SELECT magic, version, ntuples, bsize, bmsize, bmshift, maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, spares, mapp FROM hash_metapage_info(get_raw_page('test_hash_a_idx', 4)); ERROR: page is not a hash meta page SELECT magic, version, ntuples, bsize, bmsize, bmshift, maxbucket, highmask, lowmask, ovflpoint, firstfree, nmaps, procid, spares, mapp FROM hash_metapage_info(get_raw_page('test_hash_a_idx', 5)); ERROR: page is not a hash meta page SELECT live_items, dead_items, page_size, hasho_prevblkno, hasho_nextblkno, hasho_bucket, hasho_flag, hasho_page_id FROM hash_page_stats(get_raw_page('test_hash_a_idx', 0)); ERROR: page is not a hash bucket or overflow page SELECT live_items, dead_items, page_size, hasho_prevblkno, hasho_nextblkno, hasho_bucket, hasho_flag, hasho_page_id FROM hash_page_stats(get_raw_page('test_hash_a_idx', 1)); -[ RECORD 1 ]---+----------- live_items | 0 dead_items | 0 page_size | 8192 hasho_prevblkno | 3 hasho_nextblkno | 4294967295 hasho_bucket | 0 hasho_flag | 2 hasho_page_id | 65408 SELECT live_items, dead_items, page_size, hasho_prevblkno, hasho_nextblkno, hasho_bucket, hasho_flag, hasho_page_id FROM hash_page_stats(get_raw_page('test_hash_a_idx', 2)); -[ RECORD 1 ]---+----------- live_items | 0 dead_items | 0 page_size | 8192 hasho_prevblkno | 3 hasho_nextblkno | 4294967295 hasho_bucket | 1 hasho_flag | 2 hasho_page_id | 65408 SELECT live_items, dead_items, page_size, hasho_prevblkno, hasho_nextblkno, hasho_bucket, hasho_flag, hasho_page_id FROM hash_page_stats(get_raw_page('test_hash_a_idx', 3)); -[ RECORD 1 ]---+----------- live_items | 1 dead_items | 0 page_size | 8192 hasho_prevblkno | 3 hasho_nextblkno | 4294967295 hasho_bucket | 2 hasho_flag | 2 hasho_page_id | 65408 SELECT live_items, dead_items, page_size, hasho_prevblkno, hasho_nextblkno, hasho_bucket, hasho_flag, hasho_page_id FROM hash_page_stats(get_raw_page('test_hash_a_idx', 4)); -[ RECORD 1 ]---+----------- live_items | 0 dead_items | 0 page_size | 8192 hasho_prevblkno | 3 hasho_nextblkno | 4294967295 hasho_bucket | 3 hasho_flag | 2 hasho_page_id | 65408 SELECT live_items, dead_items, page_size, hasho_prevblkno, hasho_nextblkno, hasho_bucket, hasho_flag, hasho_page_id FROM hash_page_stats(get_raw_page('test_hash_a_idx', 5)); ERROR: page is not a hash bucket or overflow page SELECT * FROM hash_page_items(get_raw_page('test_hash_a_idx', 0)); ERROR: page is not a hash bucket or overflow page SELECT * FROM hash_page_items(get_raw_page('test_hash_a_idx', 1)); (0 rows) SELECT * FROM hash_page_items(get_raw_page('test_hash_a_idx', 2)); (0 rows) SELECT * FROM hash_page_items(get_raw_page('test_hash_a_idx', 3)); -[ RECORD 1 ]---------- itemoffset | 1 ctid | (0,1) data | 2389907270 SELECT * FROM hash_page_items(get_raw_page('test_hash_a_idx', 4)); (0 rows) SELECT * FROM hash_page_items(get_raw_page('test_hash_a_idx', 5)); ERROR: page is not a hash bucket or overflow page -- Failure with non-hash index CREATE INDEX test_hash_a_btree ON test_hash USING btree (a); SELECT hash_bitmap_info('test_hash_a_btree', 0); ERROR: "test_hash_a_btree" is not a hash index -- Failure with various modes. -- Suppress the DETAIL message, to allow the tests to work across various -- page sizes and architectures. \set VERBOSITY terse -- invalid page size SELECT hash_metapage_info('aaa'::bytea); ERROR: invalid page size SELECT hash_page_items('bbb'::bytea); ERROR: invalid page size SELECT hash_page_stats('ccc'::bytea); ERROR: invalid page size SELECT hash_page_type('ddd'::bytea); ERROR: invalid page size -- invalid special area size SELECT hash_metapage_info(get_raw_page('test_hash', 0)); ERROR: input page is not a valid hash page SELECT hash_page_items(get_raw_page('test_hash', 0)); ERROR: input page is not a valid hash page SELECT hash_page_stats(get_raw_page('test_hash', 0)); ERROR: input page is not a valid hash page SELECT hash_page_type(get_raw_page('test_hash', 0)); ERROR: input page is not a valid hash page \set VERBOSITY default -- Tests with all-zero pages. SHOW block_size \gset SELECT hash_metapage_info(decode(repeat('00', :block_size), 'hex')); ERROR: page is not a hash meta page SELECT hash_page_items(decode(repeat('00', :block_size), 'hex')); ERROR: page is not a hash bucket or overflow page SELECT hash_page_stats(decode(repeat('00', :block_size), 'hex')); ERROR: page is not a hash bucket or overflow page SELECT hash_page_type(decode(repeat('00', :block_size), 'hex')); -[ RECORD 1 ]--+------- hash_page_type | unused DROP TABLE test_hash;