Add page id to bloom index

Added to ensure that bloom index pages can be distinguished from other pages
by pg_filedump. Because there wasn't any public/production versions before,
it doesn't pay attention to any compatibility issues.

Per notice from Tom Lane
This commit is contained in:
Teodor Sigaev 2016-04-12 18:03:01 +03:00
parent e7bcde8ca0
commit 813b456ea2
2 changed files with 18 additions and 2 deletions

View File

@ -31,8 +31,13 @@
/* Opaque for bloom pages */
typedef struct BloomPageOpaqueData
{
OffsetNumber maxoff;
uint16 flags;
OffsetNumber maxoff; /* number of index tuples on page */
uint16 flags; /* see bit definitions below */
uint16 unused; /* placeholder to force maxaligning of size
* of BloomPageOpaqueData and to place
* bloom_page_id exactly at the end of page
*/
uint16 bloom_page_id; /* for identification of BLOOM indexes */
} BloomPageOpaqueData;
typedef BloomPageOpaqueData *BloomPageOpaque;
@ -41,6 +46,16 @@ typedef BloomPageOpaqueData *BloomPageOpaque;
#define BLOOM_META (1<<0)
#define BLOOM_DELETED (2<<0)
/*
* The page ID is for the convenience of pg_filedump and similar utilities,
* which otherwise would have a hard time telling pages of different index
* types apart. It should be the last 2 bytes on the page. This is more or
* less "free" due to alignment considerations.
*
* See comments above GinPageOpaqueData.
*/
#define BLOOM_PAGE_ID 0xFF83
/* Macros for accessing bloom page structures */
#define BloomPageGetOpaque(page) ((BloomPageOpaque) PageGetSpecialPointer(page))
#define BloomPageGetMaxOffset(page) (BloomPageGetOpaque(page)->maxoff)

View File

@ -359,6 +359,7 @@ BloomInitPage(Page page, uint16 flags)
opaque = BloomPageGetOpaque(page);
memset(opaque, 0, sizeof(BloomPageOpaqueData));
opaque->flags = flags;
opaque->bloom_page_id = BLOOM_PAGE_ID;
}
/*