PostgreSQL Source Code git master
xloginsert.h
Go to the documentation of this file.
1/*
2 * xloginsert.h
3 *
4 * Functions for generating WAL records
5 *
6 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * src/include/access/xloginsert.h
10 */
11#ifndef XLOGINSERT_H
12#define XLOGINSERT_H
13
14#include "access/rmgr.h"
15#include "access/xlogdefs.h"
16#include "storage/block.h"
17#include "storage/buf.h"
18#include "storage/bufpage.h"
20#include "utils/relcache.h"
21
22/*
23 * The minimum size of the WAL construction working area. If you need to
24 * register more than XLR_NORMAL_MAX_BLOCK_ID block references or have more
25 * than XLR_NORMAL_RDATAS data chunks in a single WAL record, you must call
26 * XLogEnsureRecordSpace() first to allocate more working memory.
27 */
28#define XLR_NORMAL_MAX_BLOCK_ID 4
29#define XLR_NORMAL_RDATAS 20
30
31/* flags for XLogRegisterBuffer */
32#define REGBUF_FORCE_IMAGE 0x01 /* force a full-page image */
33#define REGBUF_NO_IMAGE 0x02 /* don't take a full-page image */
34#define REGBUF_WILL_INIT (0x04 | 0x02) /* page will be re-initialized at
35 * replay (implies NO_IMAGE) */
36#define REGBUF_STANDARD 0x08 /* page follows "standard" page layout,
37 * (data between pd_lower and pd_upper
38 * will be skipped) */
39#define REGBUF_KEEP_DATA 0x10 /* include data even if a full-page image
40 * is taken */
41#define REGBUF_NO_CHANGE 0x20 /* intentionally register clean buffer */
42
43/* prototypes for public functions in xloginsert.c: */
44extern void XLogBeginInsert(void);
45extern void XLogSetRecordFlags(uint8 flags);
46extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info);
48extern void XLogEnsureRecordSpace(int max_block_id, int ndatas);
49extern void XLogRegisterData(const void *data, uint32 len);
50extern void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags);
51extern void XLogRegisterBlock(uint8 block_id, RelFileLocator *rlocator,
52 ForkNumber forknum, BlockNumber blknum, const PageData *page,
53 uint8 flags);
54extern void XLogRegisterBufData(uint8 block_id, const void *data, uint32 len);
55extern void XLogResetInsertion(void);
56extern bool XLogCheckBufferNeedsBackup(Buffer buffer);
57
58extern XLogRecPtr log_newpage(RelFileLocator *rlocator, ForkNumber forknum,
59 BlockNumber blkno, Page page, bool page_std);
60extern void log_newpages(RelFileLocator *rlocator, ForkNumber forknum, int num_pages,
61 BlockNumber *blknos, Page *pages, bool page_std);
62extern XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std);
63extern void log_newpage_range(Relation rel, ForkNumber forknum,
64 BlockNumber startblk, BlockNumber endblk, bool page_std);
65extern XLogRecPtr XLogSaveBufferForHint(Buffer buffer, bool buffer_std);
66
67extern void InitXLogInsert(void);
68
69#endif /* XLOGINSERT_H */
uint32 BlockNumber
Definition: block.h:31
int Buffer
Definition: buf.h:23
char PageData
Definition: bufpage.h:80
PageData * Page
Definition: bufpage.h:81
uint8_t uint8
Definition: c.h:541
int64_t int64
Definition: c.h:540
uint32_t uint32
Definition: c.h:543
static struct @171 value
const void size_t len
const void * data
ForkNumber
Definition: relpath.h:56
uint8 RmgrId
Definition: rmgr.h:11
uint64 XLogRecPtr
Definition: xlogdefs.h:21
XLogRecPtr XLogSimpleInsertInt64(RmgrId rmid, uint8 info, int64 value)
Definition: xloginsert.c:543
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
Definition: xloginsert.c:478
void XLogRegisterBufData(uint8 block_id, const void *data, uint32 len)
Definition: xloginsert.c:409
bool XLogCheckBufferNeedsBackup(Buffer buffer)
Definition: xloginsert.c:1049
void XLogRegisterData(const void *data, uint32 len)
Definition: xloginsert.c:368
XLogRecPtr XLogSaveBufferForHint(Buffer buffer, bool buffer_std)
Definition: xloginsert.c:1087
XLogRecPtr log_newpage(RelFileLocator *rlocator, ForkNumber forknum, BlockNumber blkno, Page page, bool page_std)
Definition: xloginsert.c:1165
void InitXLogInsert(void)
Definition: xloginsert.c:1370
void XLogSetRecordFlags(uint8 flags)
Definition: xloginsert.c:460
void log_newpages(RelFileLocator *rlocator, ForkNumber forknum, int num_pages, BlockNumber *blknos, Page *pages, bool page_std)
Definition: xloginsert.c:1197
void XLogRegisterBlock(uint8 block_id, RelFileLocator *rlocator, ForkNumber forknum, BlockNumber blknum, const PageData *page, uint8 flags)
Definition: xloginsert.c:313
void log_newpage_range(Relation rel, ForkNumber forknum, BlockNumber startblk, BlockNumber endblk, bool page_std)
Definition: xloginsert.c:1292
void XLogResetInsertion(void)
Definition: xloginsert.c:225
XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std)
Definition: xloginsert.c:1259
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
Definition: xloginsert.c:245
void XLogBeginInsert(void)
Definition: xloginsert.c:152
void XLogEnsureRecordSpace(int max_block_id, int ndatas)
Definition: xloginsert.c:178