/*
* brin_page . h
* Prototypes and definitions for BRIN page layouts
*
* Portions Copyright ( c ) 1996 - 2025 , PostgreSQL Global Development Group
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
* IDENTIFICATION
* src / include / access / brin_page . h
*
* NOTES
*
* These structs should really be private to specific BRIN files , but it ' s
* useful to have them here so that they can be used by pageinspect and similar
* tools .
*/
#ifndef BRIN_PAGE_H
#define BRIN_PAGE_H
#include "storage/block.h"
#include "storage/itemptr.h"
/*
* Special area of BRIN pages .
*
* We define it in this odd way so that it always occupies the last
* MAXALIGN - sized element of each page .
*/
typedef struct BrinSpecialSpace
{
uint16 vector[MAXALIGN(1 ) / sizeof (uint16)];
} BrinSpecialSpace;
/*
* Make the page type be the last half - word in the page , for consumption by
* pg_filedump and similar utilities . We don ' t really care much about the
* position of the " flags " half - word , but it ' s simpler to apply a consistent
* rule to both .
*
* See comments above GinPageOpaqueData .
*/
#define BrinPageType(page) \
(((BrinSpecialSpace *) \
PageGetSpecialPointer(page))->vector[MAXALIGN(1 ) / sizeof (uint16) - 1 ])
#define BrinPageFlags(page) \
(((BrinSpecialSpace *) \
PageGetSpecialPointer(page))->vector[MAXALIGN(1 ) / sizeof (uint16) - 2 ])
/* special space on all BRIN pages stores a "type" identifier */
#define BRIN_PAGETYPE_META 0 xF091
#define BRIN_PAGETYPE_REVMAP 0 xF092
#define BRIN_PAGETYPE_REGULAR 0 xF093
#define BRIN_IS_META_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_META)
#define BRIN_IS_REVMAP_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REVMAP)
#define BRIN_IS_REGULAR_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REGULAR)
/* flags for BrinSpecialSpace */
#define BRIN_EVACUATE_PAGE (1 << 0 )
/* Metapage definitions */
typedef struct BrinMetaPageData
{
uint32 brinMagic;
uint32 brinVersion;
BlockNumber pagesPerRange;
BlockNumber lastRevmapPage;
} BrinMetaPageData;
#define BRIN_CURRENT_VERSION 1
#define BRIN_META_MAGIC 0 xA8109CFA
#define BRIN_METAPAGE_BLKNO 0
/* Definitions for revmap pages */
typedef struct RevmapContents
{
/*
* This array will fill all available space on the page . It should be
* declared [ FLEXIBLE_ARRAY_MEMBER ] , but for some reason you can ' t do that
* in an otherwise - empty struct .
*/
ItemPointerData rm_tids[1 ];
} RevmapContents;
#define REVMAP_CONTENT_SIZE \
(BLCKSZ - MAXALIGN(SizeOfPageHeaderData) - \
offsetof(RevmapContents, rm_tids) - \
MAXALIGN(sizeof (BrinSpecialSpace)))
/* max num of items in the array */
#define REVMAP_PAGE_MAXITEMS \
(REVMAP_CONTENT_SIZE / sizeof (ItemPointerData))
#endif /* BRIN_PAGE_H */
Messung V0.5 in Prozent C=93 H=89 G=90
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-08)
¤
*© Formatika GbR, Deutschland