codekingpro/portable-devtools
114k
1/*-------------------------------------------------------------------------2 *3 * brin_xlog.h4 * POSTGRES BRIN access XLOG definitions.5 *6 *7 * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group8 * Portions Copyright (c) 1994, Regents of the University of California9 *10 * src/include/access/brin_xlog.h11 *12 *-------------------------------------------------------------------------13 */14#ifndef BRIN_XLOG_H15#define BRIN_XLOG_H16 17#include "access/xlogreader.h"18#include "lib/stringinfo.h"19#include "storage/bufpage.h"20#include "storage/itemptr.h"21#include "storage/relfilelocator.h"22#include "utils/relcache.h"23 24 25/*26 * WAL record definitions for BRIN's WAL operations27 *28 * XLOG allows to store some information in high 4 bits of log29 * record xl_info field.30 */31#define XLOG_BRIN_CREATE_INDEX 0x0032#define XLOG_BRIN_INSERT 0x1033#define XLOG_BRIN_UPDATE 0x2034#define XLOG_BRIN_SAMEPAGE_UPDATE 0x3035#define XLOG_BRIN_REVMAP_EXTEND 0x4036#define XLOG_BRIN_DESUMMARIZE 0x5037 38#define XLOG_BRIN_OPMASK 0x7039/*40 * When we insert the first item on a new page, we restore the entire page in41 * redo.42 */43#define XLOG_BRIN_INIT_PAGE 0x8044 45/*46 * This is what we need to know about a BRIN index create.47 *48 * Backup block 0: metapage49 */50typedef struct xl_brin_createidx51{52 BlockNumber pagesPerRange;53 uint16 version;54} xl_brin_createidx;55#define SizeOfBrinCreateIdx (offsetof(xl_brin_createidx, version) + sizeof(uint16))56 57/*58 * This is what we need to know about a BRIN tuple insert59 *60 * Backup block 0: main page, block data is the new BrinTuple.61 * Backup block 1: revmap page62 */63typedef struct xl_brin_insert64{65 BlockNumber heapBlk;66 67 /* extra information needed to update the revmap */68 BlockNumber pagesPerRange;69 70 /* offset number in the main page to insert the tuple to. */71 OffsetNumber offnum;72} xl_brin_insert;73 74#define SizeOfBrinInsert (offsetof(xl_brin_insert, offnum) + sizeof(OffsetNumber))75 76/*77 * A cross-page update is the same as an insert, but also stores information78 * about the old tuple.79 *80 * Like in xl_brin_insert:81 * Backup block 0: new page, block data includes the new BrinTuple.82 * Backup block 1: revmap page83 *84 * And in addition:85 * Backup block 2: old page86 */87typedef struct xl_brin_update88{89 /* offset number of old tuple on old page */90 OffsetNumber oldOffnum;91 92 xl_brin_insert insert;93} xl_brin_update;94 95#define SizeOfBrinUpdate (offsetof(xl_brin_update, insert) + SizeOfBrinInsert)96 97/*98 * This is what we need to know about a BRIN tuple samepage update99 *100 * Backup block 0: updated page, with new BrinTuple as block data101 */102typedef struct xl_brin_samepage_update103{104 OffsetNumber offnum;105} xl_brin_samepage_update;106 107#define SizeOfBrinSamepageUpdate (sizeof(OffsetNumber))108 109/*110 * This is what we need to know about a revmap extension111 *112 * Backup block 0: metapage113 * Backup block 1: new revmap page114 */115typedef struct xl_brin_revmap_extend116{117 /*118 * XXX: This is actually redundant - the block number is stored as part of119 * backup block 1.120 */121 BlockNumber targetBlk;122} xl_brin_revmap_extend;123 124#define SizeOfBrinRevmapExtend (offsetof(xl_brin_revmap_extend, targetBlk) + \125 sizeof(BlockNumber))126 127/*128 * This is what we need to know about a range de-summarization129 *130 * Backup block 0: revmap page131 * Backup block 1: regular page132 */133typedef struct xl_brin_desummarize134{135 BlockNumber pagesPerRange;136 /* page number location to set to invalid */137 BlockNumber heapBlk;138 /* offset of item to delete in regular index page */139 OffsetNumber regOffset;140} xl_brin_desummarize;141 142#define SizeOfBrinDesummarize (offsetof(xl_brin_desummarize, regOffset) + \143 sizeof(OffsetNumber))144 145 146extern void brin_redo(XLogReaderState *record);147extern void brin_desc(StringInfo buf, XLogReaderState *record);148extern const char *brin_identify(uint8 info);149extern void brin_mask(char *pagedata, BlockNumber blkno);150 151#endif /* BRIN_XLOG_H */152 