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);
47extern void XLogEnsureRecordSpace(int max_block_id, int ndatas);
48extern void XLogRegisterData(const void *data, uint32 len);
49extern void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags);
50extern void XLogRegisterBlock(uint8 block_id, RelFileLocator *rlocator,
51 ForkNumber forknum, BlockNumber blknum, const PageData *page,
52 uint8 flags);
53extern void XLogRegisterBufData(uint8 block_id, const void *data, uint32 len);
54extern void XLogResetInsertion(void);
55extern bool XLogCheckBufferNeedsBackup(Buffer buffer);
56
57extern XLogRecPtr log_newpage(RelFileLocator *rlocator, ForkNumber forknum,
58 BlockNumber blkno, Page page, bool page_std);
59extern void log_newpages(RelFileLocator *rlocator, ForkNumber forknum, int num_pages,
60 BlockNumber *blknos, Page *pages, bool page_std);
61extern XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std);
62extern void log_newpage_range(Relation rel, ForkNumber forknum,
63 BlockNumber startblk, BlockNumber endblk, bool page_std);
64extern XLogRecPtr XLogSaveBufferForHint(Buffer buffer, bool buffer_std);
65
66extern void InitXLogInsert(void);
67
68#endif /* XLOGINSERT_H */
uint32 BlockNumber
Definition: block.h:31
int Buffer
Definition: buf.h:23
char PageData
Definition: bufpage.h:81
PageData * Page
Definition: bufpage.h:82
uint8_t uint8
Definition: c.h:500
uint32_t uint32
Definition: c.h:502
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 XLogInsert(RmgrId rmid, uint8 info)
Definition: xloginsert.c:474
void XLogRegisterBufData(uint8 block_id, const void *data, uint32 len)
Definition: xloginsert.c:405
bool XLogCheckBufferNeedsBackup(Buffer buffer)
Definition: xloginsert.c:1027
void XLogRegisterData(const void *data, uint32 len)
Definition: xloginsert.c:364
XLogRecPtr XLogSaveBufferForHint(Buffer buffer, bool buffer_std)
Definition: xloginsert.c:1065
XLogRecPtr log_newpage(RelFileLocator *rlocator, ForkNumber forknum, BlockNumber blkno, Page page, bool page_std)
Definition: xloginsert.c:1143
void InitXLogInsert(void)
Definition: xloginsert.c:1348
void XLogSetRecordFlags(uint8 flags)
Definition: xloginsert.c:456
void log_newpages(RelFileLocator *rlocator, ForkNumber forknum, int num_pages, BlockNumber *blknos, Page *pages, bool page_std)
Definition: xloginsert.c:1175
void XLogRegisterBlock(uint8 block_id, RelFileLocator *rlocator, ForkNumber forknum, BlockNumber blknum, const PageData *page, uint8 flags)
Definition: xloginsert.c:309
void log_newpage_range(Relation rel, ForkNumber forknum, BlockNumber startblk, BlockNumber endblk, bool page_std)
Definition: xloginsert.c:1270
void XLogResetInsertion(void)
Definition: xloginsert.c:222
XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std)
Definition: xloginsert.c:1237
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
Definition: xloginsert.c:242
void XLogBeginInsert(void)
Definition: xloginsert.c:149
void XLogEnsureRecordSpace(int max_block_id, int ndatas)
Definition: xloginsert.c:175