PostgreSQL Source Code
git master
brin_page.h
Go to the documentation of this file.
1
/*
2
* brin_page.h
3
* Prototypes and definitions for BRIN page layouts
4
*
5
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
6
* Portions Copyright (c) 1994, Regents of the University of California
7
*
8
* IDENTIFICATION
9
* src/include/access/brin_page.h
10
*
11
* NOTES
12
*
13
* These structs should really be private to specific BRIN files, but it's
14
* useful to have them here so that they can be used by pageinspect and similar
15
* tools.
16
*/
17
#ifndef BRIN_PAGE_H
18
#define BRIN_PAGE_H
19
20
#include "
storage/block.h
"
21
#include "
storage/itemptr.h
"
22
23
/*
24
* Special area of BRIN pages.
25
*
26
* We define it in this odd way so that it always occupies the last
27
* MAXALIGN-sized element of each page.
28
*/
29
typedef
struct
BrinSpecialSpace
30
{
31
uint16
vector
[
MAXALIGN
(1) /
sizeof
(
uint16
)];
32
}
BrinSpecialSpace
;
33
34
/*
35
* Make the page type be the last half-word in the page, for consumption by
36
* pg_filedump and similar utilities. We don't really care much about the
37
* position of the "flags" half-word, but it's simpler to apply a consistent
38
* rule to both.
39
*
40
* See comments above GinPageOpaqueData.
41
*/
42
#define BrinPageType(page) \
43
(((BrinSpecialSpace *) \
44
PageGetSpecialPointer(page))->vector[MAXALIGN(1) / sizeof(uint16) - 1])
45
46
#define BrinPageFlags(page) \
47
(((BrinSpecialSpace *) \
48
PageGetSpecialPointer(page))->vector[MAXALIGN(1) / sizeof(uint16) - 2])
49
50
/* special space on all BRIN pages stores a "type" identifier */
51
#define BRIN_PAGETYPE_META 0xF091
52
#define BRIN_PAGETYPE_REVMAP 0xF092
53
#define BRIN_PAGETYPE_REGULAR 0xF093
54
55
#define BRIN_IS_META_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_META)
56
#define BRIN_IS_REVMAP_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REVMAP)
57
#define BRIN_IS_REGULAR_PAGE(page) (BrinPageType(page) == BRIN_PAGETYPE_REGULAR)
58
59
/* flags for BrinSpecialSpace */
60
#define BRIN_EVACUATE_PAGE (1 << 0)
61
62
63
/* Metapage definitions */
64
typedef
struct
BrinMetaPageData
65
{
66
uint32
brinMagic
;
67
uint32
brinVersion
;
68
BlockNumber
pagesPerRange
;
69
BlockNumber
lastRevmapPage
;
70
}
BrinMetaPageData
;
71
72
#define BRIN_CURRENT_VERSION 1
73
#define BRIN_META_MAGIC 0xA8109CFA
74
75
#define BRIN_METAPAGE_BLKNO 0
76
77
/* Definitions for revmap pages */
78
typedef
struct
RevmapContents
79
{
80
/*
81
* This array will fill all available space on the page. It should be
82
* declared [FLEXIBLE_ARRAY_MEMBER], but for some reason you can't do that
83
* in an otherwise-empty struct.
84
*/
85
ItemPointerData
rm_tids
[1];
86
}
RevmapContents
;
87
88
#define REVMAP_CONTENT_SIZE \
89
(BLCKSZ - MAXALIGN(SizeOfPageHeaderData) - \
90
offsetof(RevmapContents, rm_tids) - \
91
MAXALIGN(sizeof(BrinSpecialSpace)))
92
/* max num of items in the array */
93
#define REVMAP_PAGE_MAXITEMS \
94
(REVMAP_CONTENT_SIZE / sizeof(ItemPointerData))
95
96
#endif
/* BRIN_PAGE_H */
block.h
BlockNumber
uint32 BlockNumber
Definition:
block.h:31
BrinMetaPageData
struct BrinMetaPageData BrinMetaPageData
RevmapContents
struct RevmapContents RevmapContents
BrinSpecialSpace
struct BrinSpecialSpace BrinSpecialSpace
uint16
unsigned short uint16
Definition:
c.h:508
uint32
unsigned int uint32
Definition:
c.h:509
MAXALIGN
#define MAXALIGN(LEN)
Definition:
c.h:814
itemptr.h
BrinMetaPageData
Definition:
brin_page.h:65
BrinMetaPageData::brinVersion
uint32 brinVersion
Definition:
brin_page.h:67
BrinMetaPageData::brinMagic
uint32 brinMagic
Definition:
brin_page.h:66
BrinMetaPageData::lastRevmapPage
BlockNumber lastRevmapPage
Definition:
brin_page.h:69
BrinMetaPageData::pagesPerRange
BlockNumber pagesPerRange
Definition:
brin_page.h:68
BrinSpecialSpace
Definition:
brin_page.h:30
BrinSpecialSpace::vector
uint16 vector[MAXALIGN(1)/sizeof(uint16)]
Definition:
brin_page.h:31
ItemPointerData
Definition:
itemptr.h:37
RevmapContents
Definition:
brin_page.h:79
RevmapContents::rm_tids
ItemPointerData rm_tids[1]
Definition:
brin_page.h:85
src
include
access
brin_page.h
Generated on Sun Oct 6 2024 18:13:24 for PostgreSQL Source Code by
1.9.1