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 */ /* Opaque for bloom pages */
typedef struct BloomPageOpaqueData typedef struct BloomPageOpaqueData
{ {
OffsetNumber maxoff; OffsetNumber maxoff; /* number of index tuples on page */
uint16 flags; 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; } BloomPageOpaqueData;
typedef BloomPageOpaqueData *BloomPageOpaque; typedef BloomPageOpaqueData *BloomPageOpaque;
@ -41,6 +46,16 @@ typedef BloomPageOpaqueData *BloomPageOpaque;
#define BLOOM_META (1<<0) #define BLOOM_META (1<<0)
#define BLOOM_DELETED (2<<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 */ /* Macros for accessing bloom page structures */
#define BloomPageGetOpaque(page) ((BloomPageOpaque) PageGetSpecialPointer(page)) #define BloomPageGetOpaque(page) ((BloomPageOpaque) PageGetSpecialPointer(page))
#define BloomPageGetMaxOffset(page) (BloomPageGetOpaque(page)->maxoff) #define BloomPageGetMaxOffset(page) (BloomPageGetOpaque(page)->maxoff)

View File

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