PostgreSQL Source Code git master
xlog.h
Go to the documentation of this file.
1/*
2 * xlog.h
3 *
4 * PostgreSQL write-ahead log manager
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/xlog.h
10 */
11#ifndef XLOG_H
12#define XLOG_H
13
14#include "access/xlogbackup.h"
15#include "access/xlogdefs.h"
16#include "datatype/timestamp.h"
17#include "lib/stringinfo.h"
18#include "nodes/pg_list.h"
19
20
21/* Sync methods */
23{
26 WAL_SYNC_METHOD_OPEN, /* for O_SYNC */
28 WAL_SYNC_METHOD_OPEN_DSYNC /* for O_DSYNC */
29};
31
35
36/* these variables are GUC parameters related to XLOG */
42extern PGDLLIMPORT int XLOGbuffers;
47extern PGDLLIMPORT bool fullPageWrites;
48extern PGDLLIMPORT bool wal_log_hints;
50extern PGDLLIMPORT bool wal_init_zero;
51extern PGDLLIMPORT bool wal_recycle;
55extern PGDLLIMPORT int CommitDelay;
59
61
62/* Archive modes */
63typedef enum ArchiveMode
64{
65 ARCHIVE_MODE_OFF = 0, /* disabled */
66 ARCHIVE_MODE_ON, /* enabled while server is running normally */
67 ARCHIVE_MODE_ALWAYS, /* enabled always (even during recovery) */
70
71/* WAL levels */
72typedef enum WalLevel
73{
78
79/* Compression algorithms for WAL */
80typedef enum WalCompression
81{
87
88/* Recovery states */
89typedef enum RecoveryState
90{
91 RECOVERY_STATE_CRASH = 0, /* crash recovery */
92 RECOVERY_STATE_ARCHIVE, /* archive recovery */
93 RECOVERY_STATE_DONE, /* currently in production */
95
96extern PGDLLIMPORT int wal_level;
97
98/* Is WAL archiving enabled (always or only while server is running normally)? */
99#define XLogArchivingActive() \
100 (AssertMacro(XLogArchiveMode == ARCHIVE_MODE_OFF || wal_level >= WAL_LEVEL_REPLICA), XLogArchiveMode > ARCHIVE_MODE_OFF)
101/* Is WAL archiving enabled always (even during recovery)? */
102#define XLogArchivingAlways() \
103 (AssertMacro(XLogArchiveMode == ARCHIVE_MODE_OFF || wal_level >= WAL_LEVEL_REPLICA), XLogArchiveMode == ARCHIVE_MODE_ALWAYS)
104
105/*
106 * Is WAL-logging necessary for archival or log-shipping, or can we skip
107 * WAL-logging if we fsync() the data before committing instead?
108 */
109#define XLogIsNeeded() (wal_level >= WAL_LEVEL_REPLICA)
110
111/*
112 * Is a full-page image needed for hint bit updates?
113 *
114 * Normally, we don't WAL-log hint bit updates, but if checksums are enabled,
115 * we have to protect them against torn page writes. When you only set
116 * individual bits on a page, it's still consistent no matter what combination
117 * of the bits make it to disk, but the checksum wouldn't match. Also WAL-log
118 * them if forced by wal_log_hints=on.
119 */
120#define XLogHintBitIsNeeded() (DataChecksumsEnabled() || wal_log_hints)
121
122/* Do we need to WAL-log information required only for Hot Standby and logical replication? */
123#define XLogStandbyInfoActive() (wal_level >= WAL_LEVEL_REPLICA)
124
125/* Do we need to WAL-log information required only for logical replication? */
126#define XLogLogicalInfoActive() (wal_level >= WAL_LEVEL_LOGICAL)
127
128#ifdef WAL_DEBUG
129extern PGDLLIMPORT bool XLOG_DEBUG;
130#endif
131
132/*
133 * OR-able request flag bits for checkpoints. The "cause" bits are used only
134 * for logging purposes. Note: the flags must be defined so that it's
135 * sensible to OR together request flags arising from different requestors.
136 */
137
138/* These directly affect the behavior of CreateCheckPoint and subsidiaries */
139#define CHECKPOINT_IS_SHUTDOWN 0x0001 /* Checkpoint is for shutdown */
140#define CHECKPOINT_END_OF_RECOVERY 0x0002 /* Like shutdown checkpoint, but
141 * issued at end of WAL recovery */
142#define CHECKPOINT_FAST 0x0004 /* Do it without delays */
143#define CHECKPOINT_FORCE 0x0008 /* Force even if no activity */
144#define CHECKPOINT_FLUSH_UNLOGGED 0x0010 /* Flush unlogged tables */
145/* These are important to RequestCheckpoint */
146#define CHECKPOINT_WAIT 0x0020 /* Wait for completion */
147#define CHECKPOINT_REQUESTED 0x0040 /* Checkpoint request has been made */
148/* These indicate the cause of a checkpoint request */
149#define CHECKPOINT_CAUSE_XLOG 0x0080 /* XLOG consumption */
150#define CHECKPOINT_CAUSE_TIME 0x0100 /* Elapsed time */
151
152/*
153 * Flag bits for the record being inserted, set using XLogSetRecordFlags().
154 */
155#define XLOG_INCLUDE_ORIGIN 0x01 /* include the replication origin */
156#define XLOG_MARK_UNIMPORTANT 0x02 /* record not important for durability */
157
158
159/* Checkpoint statistics */
160typedef struct CheckpointStatsData
162 TimestampTz ckpt_start_t; /* start of checkpoint */
163 TimestampTz ckpt_write_t; /* start of flushing buffers */
164 TimestampTz ckpt_sync_t; /* start of fsyncs */
165 TimestampTz ckpt_sync_end_t; /* end of fsyncs */
166 TimestampTz ckpt_end_t; /* end of checkpoint */
168 int ckpt_bufs_written; /* # of buffers written */
169 int ckpt_slru_written; /* # of SLRU buffers written */
171 int ckpt_segs_added; /* # of new xlog segments created */
172 int ckpt_segs_removed; /* # of xlog segments deleted */
173 int ckpt_segs_recycled; /* # of xlog segments recycled */
175 int ckpt_sync_rels; /* # of relations synced */
176 uint64 ckpt_longest_sync; /* Longest sync for one relation */
177 uint64 ckpt_agg_sync_time; /* The sum of all the individual sync
178 * times, which is not necessarily the
179 * same as the total elapsed time for the
180 * entire sync phase. */
182
184
185/*
186 * GetWALAvailability return codes
187 */
188typedef enum WALAvailability
190 WALAVAIL_INVALID_LSN, /* parameter error */
191 WALAVAIL_RESERVED, /* WAL segment is within max_wal_size */
192 WALAVAIL_EXTENDED, /* WAL segment is reserved by a slot or
193 * wal_keep_size */
194 WALAVAIL_UNRESERVED, /* no longer reserved, but not removed yet */
195 WALAVAIL_REMOVED, /* WAL segment has been removed */
197
198struct XLogRecData;
199struct XLogReaderState;
200
201extern XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata,
202 XLogRecPtr fpw_lsn,
203 uint8 flags,
204 int num_fpi,
205 uint64 fpi_bytes,
206 bool topxid_included);
207extern void XLogFlush(XLogRecPtr record);
208extern bool XLogBackgroundFlush(void);
209extern bool XLogNeedsFlush(XLogRecPtr record);
210extern int XLogFileInit(XLogSegNo logsegno, TimeLineID logtli);
211extern int XLogFileOpen(XLogSegNo segno, TimeLineID tli);
212
213extern void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli);
216extern void XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN);
218
219extern void xlog_redo(struct XLogReaderState *record);
220extern void xlog_desc(StringInfo buf, struct XLogReaderState *record);
221extern const char *xlog_identify(uint8 info);
222
223extern void issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli);
224
225extern bool RecoveryInProgress(void);
227extern bool XLogInsertAllowed(void);
229extern XLogRecPtr GetXLogWriteRecPtr(void);
230
231extern uint64 GetSystemIdentifier(void);
232extern char *GetMockAuthenticationNonce(void);
233extern bool DataChecksumsEnabled(void);
234extern bool GetDefaultCharSignedness(void);
236extern Size XLOGShmemSize(void);
237extern void XLOGShmemInit(void);
238extern void BootStrapXLOG(uint32 data_checksum_version);
239extern void InitializeWalConsistencyChecking(void);
240extern void LocalProcessControlFile(bool reset);
242extern void StartupXLOG(void);
243extern void ShutdownXLOG(int code, Datum arg);
244extern bool CreateCheckPoint(int flags);
245extern bool CreateRestartPoint(int flags);
247extern void XLogPutNextOid(Oid nextOid);
248extern XLogRecPtr XLogRestorePoint(const char *rpName);
249extern void UpdateFullPageWrites(void);
250extern void GetFullPageWriteInfo(XLogRecPtr *RedoRecPtr_p, bool *doPageWrites_p);
251extern XLogRecPtr GetRedoRecPtr(void);
252extern XLogRecPtr GetInsertRecPtr(void);
253extern XLogRecPtr GetFlushRecPtr(TimeLineID *insertTLI);
257
258extern void SetWalWriterSleeping(bool sleeping);
259
260extern Size WALReadFromBuffers(char *dstbuf, XLogRecPtr startptr, Size count,
261 TimeLineID tli);
262
263/*
264 * Routines used by xlogrecovery.c to call back into xlog.c during recovery.
265 */
266extern void RemoveNonParentXlogFiles(XLogRecPtr switchpoint, TimeLineID newTLI);
267extern bool XLogCheckpointNeeded(XLogSegNo new_segno);
270extern void SetInstallXLogFileSegmentActive(void);
271extern bool IsInstallXLogFileSegmentActive(void);
272extern void ResetInstallXLogFileSegmentActive(void);
273extern void XLogShutdownWalRcv(void);
274
275/*
276 * Routines to start, stop, and get status of a base backup.
277 */
278
279/*
280 * Session-level status of base backups
281 *
282 * This is used in parallel with the shared memory status to control parallel
283 * execution of base backup functions for a given session, be it a backend
284 * dedicated to replication or a normal backend connected to a database. The
285 * update of the session-level status happens at the same time as the shared
286 * memory counters to keep a consistent global and local state of the backups
287 * running.
288 */
289typedef enum SessionBackupState
294
295extern void do_pg_backup_start(const char *backupidstr, bool fast,
296 List **tablespaces, BackupState *state,
297 StringInfo tblspcmapfile);
298extern void do_pg_backup_stop(BackupState *state, bool waitforarchive);
299extern void do_pg_abort_backup(int code, Datum arg);
302
303/* File path names (all relative to $PGDATA) */
304#define RECOVERY_SIGNAL_FILE "recovery.signal"
305#define STANDBY_SIGNAL_FILE "standby.signal"
306#define BACKUP_LABEL_FILE "backup_label"
307#define BACKUP_LABEL_OLD "backup_label.old"
309#define TABLESPACE_MAP "tablespace_map"
310#define TABLESPACE_MAP_OLD "tablespace_map.old"
311
312/* files to signal promotion to primary */
313#define PROMOTE_SIGNAL_FILE "promote"
314
315#endif /* XLOG_H */
#define PGDLLIMPORT
Definition: c.h:1324
uint8_t uint8
Definition: c.h:541
uint64_t uint64
Definition: c.h:544
uint32_t uint32
Definition: c.h:543
size_t Size
Definition: c.h:615
int64 TimestampTz
Definition: timestamp.h:39
void * arg
static char * buf
Definition: pg_test_fsync.c:72
uint64_t Datum
Definition: postgres.h:70
unsigned int Oid
Definition: postgres_ext.h:32
static int fd(const char *x, int i)
Definition: preproc-init.c:105
void reset(void)
Definition: sql-declare.c:600
uint64 ckpt_agg_sync_time
Definition: xlog.h:176
uint64 ckpt_longest_sync
Definition: xlog.h:175
TimestampTz ckpt_start_t
Definition: xlog.h:161
TimestampTz ckpt_end_t
Definition: xlog.h:165
int ckpt_segs_removed
Definition: xlog.h:171
TimestampTz ckpt_write_t
Definition: xlog.h:162
int ckpt_segs_added
Definition: xlog.h:170
TimestampTz ckpt_sync_end_t
Definition: xlog.h:164
TimestampTz ckpt_sync_t
Definition: xlog.h:163
int ckpt_bufs_written
Definition: xlog.h:167
int ckpt_segs_recycled
Definition: xlog.h:172
int ckpt_slru_written
Definition: xlog.h:168
int ckpt_sync_rels
Definition: xlog.h:174
Definition: pg_list.h:54
DecodedXLogRecord * record
Definition: xlogreader.h:235
XLogRecPtr EndRecPtr
Definition: xlogreader.h:206
Definition: regguts.h:323
int XLogFileInit(XLogSegNo logsegno, TimeLineID logtli)
Definition: xlog.c:3399
uint64 GetSystemIdentifier(void)
Definition: xlog.c:4609
void UpdateFullPageWrites(void)
Definition: xlog.c:8236
bool RecoveryInProgress(void)
Definition: xlog.c:6406
void GetFullPageWriteInfo(XLogRecPtr *RedoRecPtr_p, bool *doPageWrites_p)
Definition: xlog.c:6539
TimeLineID GetWALInsertionTimeLine(void)
Definition: xlog.c:6592
PGDLLIMPORT bool log_checkpoints
Definition: xlog.c:131
void do_pg_abort_backup(int code, Datum arg)
Definition: xlog.c:9458
XLogSegNo XLogGetLastRemovedSegno(void)
Definition: xlog.c:3777
void xlog_desc(StringInfo buf, struct XLogReaderState *record)
Definition: xlogdesc.c:58
Size WALReadFromBuffers(char *dstbuf, XLogRecPtr startptr, Size count, TimeLineID tli)
Definition: xlog.c:1754
XLogRecPtr GetRedoRecPtr(void)
Definition: xlog.c:6509
void SetInstallXLogFileSegmentActive(void)
Definition: xlog.c:9547
void StartupXLOG(void)
Definition: xlog.c:5483
bool IsInstallXLogFileSegmentActive(void)
Definition: xlog.c:9564
PGDLLIMPORT XLogRecPtr XactLastRecEnd
Definition: xlog.c:256
void BootStrapXLOG(uint32 data_checksum_version)
Definition: xlog.c:5089
ArchiveMode
Definition: xlog.h:64
@ ARCHIVE_MODE_ALWAYS
Definition: xlog.h:67
@ ARCHIVE_MODE_OFF
Definition: xlog.h:65
@ ARCHIVE_MODE_ON
Definition: xlog.h:66
bool CreateRestartPoint(int flags)
Definition: xlog.c:7659
PGDLLIMPORT int wal_sync_method
Definition: xlog.c:132
PGDLLIMPORT bool EnableHotStandby
Definition: xlog.c:123
XLogRecPtr GetInsertRecPtr(void)
Definition: xlog.c:6554
SessionBackupState get_backup_status(void)
Definition: xlog.c:9165
void CheckXLogRemoved(XLogSegNo segno, TimeLineID tli)
Definition: xlog.c:3746
WALAvailability
Definition: xlog.h:188
@ WALAVAIL_REMOVED
Definition: xlog.h:194
@ WALAVAIL_RESERVED
Definition: xlog.h:190
@ WALAVAIL_UNRESERVED
Definition: xlog.h:193
@ WALAVAIL_EXTENDED
Definition: xlog.h:191
@ WALAVAIL_INVALID_LSN
Definition: xlog.h:189
PGDLLIMPORT CheckpointStatsData CheckpointStats
Definition: xlog.c:211
WALAvailability GetWALAvailability(XLogRecPtr targetLSN)
Definition: xlog.c:7937
PGDLLIMPORT int wal_retrieve_retry_interval
Definition: xlog.c:136
void XLOGShmemInit(void)
Definition: xlog.c:4974
void ShutdownXLOG(int code, Datum arg)
Definition: xlog.c:6674
bool DataChecksumsEnabled(void)
Definition: xlog.c:4629
RecoveryState GetRecoveryState(void)
Definition: xlog.c:6442
const char * xlog_identify(uint8 info)
Definition: xlogdesc.c:173
PGDLLIMPORT int wal_compression
Definition: xlog.c:126
void XLogSetReplicationSlotMinimumLSN(XLogRecPtr lsn)
Definition: xlog.c:2669
PGDLLIMPORT int CommitSiblings
Definition: xlog.c:135
void SwitchIntoArchiveRecovery(XLogRecPtr EndRecPtr, TimeLineID replayTLI)
Definition: xlog.c:6281
WalCompression
Definition: xlog.h:81
@ WAL_COMPRESSION_NONE
Definition: xlog.h:82
@ WAL_COMPRESSION_LZ4
Definition: xlog.h:84
@ WAL_COMPRESSION_PGLZ
Definition: xlog.h:83
@ WAL_COMPRESSION_ZSTD
Definition: xlog.h:85
bool GetDefaultCharSignedness(void)
Definition: xlog.c:4643
PGDLLIMPORT int wal_decode_buffer_size
Definition: xlog.c:138
XLogRecPtr GetXLogInsertRecPtr(void)
Definition: xlog.c:9499
Size XLOGShmemSize(void)
Definition: xlog.c:4924
void SetWalWriterSleeping(bool sleeping)
Definition: xlog.c:9579
struct CheckpointStatsData CheckpointStatsData
int XLogFileOpen(XLogSegNo segno, TimeLineID tli)
Definition: xlog.c:3637
XLogRecPtr GetFlushRecPtr(TimeLineID *insertTLI)
Definition: xlog.c:6571
WalLevel GetActiveWalLevelOnStandby(void)
Definition: xlog.c:4915
PGDLLIMPORT int CheckPointSegments
Definition: xlog.c:158
void xlog_redo(struct XLogReaderState *record)
Definition: xlog.c:8305
void InitializeWalConsistencyChecking(void)
Definition: xlog.c:4840
PGDLLIMPORT bool fullPageWrites
Definition: xlog.c:124
void RemoveNonParentXlogFiles(XLogRecPtr switchpoint, TimeLineID newTLI)
Definition: xlog.c:3959
XLogRecPtr GetLastImportantRecPtr(void)
Definition: xlog.c:6628
PGDLLIMPORT XLogRecPtr ProcLastRecPtr
Definition: xlog.c:255
PGDLLIMPORT char * wal_consistency_checking_string
Definition: xlog.c:127
SessionBackupState
Definition: xlog.h:289
@ SESSION_BACKUP_RUNNING
Definition: xlog.h:291
@ SESSION_BACKUP_NONE
Definition: xlog.h:290
XLogRecPtr XLogInsertRecord(struct XLogRecData *rdata, XLogRecPtr fpw_lsn, uint8 flags, int num_fpi, uint64 fpi_bytes, bool topxid_included)
Definition: xlog.c:749
bool XLogNeedsFlush(XLogRecPtr record)
Definition: xlog.c:3127
PGDLLIMPORT int wal_segment_size
Definition: xlog.c:145
void register_persistent_abort_backup_handler(void)
Definition: xlog.c:9485
void ReachedEndOfBackup(XLogRecPtr EndRecPtr, TimeLineID tli)
Definition: xlog.c:6319
void LocalProcessControlFile(bool reset)
Definition: xlog.c:4902
XLogSegNo XLogGetOldestSegno(TimeLineID tli)
Definition: xlog.c:3793
PGDLLIMPORT int XLogArchiveMode
Definition: xlog.c:121
XLogRecPtr GetXLogWriteRecPtr(void)
Definition: xlog.c:9515
PGDLLIMPORT char * XLogArchiveCommand
Definition: xlog.c:122
void ResetInstallXLogFileSegmentActive(void)
Definition: xlog.c:9556
PGDLLIMPORT int wal_keep_size_mb
Definition: xlog.c:118
bool XLogBackgroundFlush(void)
Definition: xlog.c:2978
char * GetMockAuthenticationNonce(void)
Definition: xlog.c:4619
PGDLLIMPORT bool * wal_consistency_checking
Definition: xlog.c:128
PGDLLIMPORT int max_slot_wal_keep_size_mb
Definition: xlog.c:137
bool XLogInsertAllowed(void)
Definition: xlog.c:6461
void do_pg_backup_start(const char *backupidstr, bool fast, List **tablespaces, BackupState *state, StringInfo tblspcmapfile)
Definition: xlog.c:8856
PGDLLIMPORT bool wal_init_zero
Definition: xlog.c:129
PGDLLIMPORT int min_wal_size_mb
Definition: xlog.c:117
PGDLLIMPORT int CommitDelay
Definition: xlog.c:134
XLogRecPtr XLogRestorePoint(const char *rpName)
Definition: xlog.c:8148
PGDLLIMPORT int XLOGbuffers
Definition: xlog.c:119
TimeLineID GetWALInsertionTimeLineIfSet(void)
Definition: xlog.c:6608
void do_pg_backup_stop(BackupState *state, bool waitforarchive)
Definition: xlog.c:9184
PGDLLIMPORT bool wal_recycle
Definition: xlog.c:130
WalLevel
Definition: xlog.h:73
@ WAL_LEVEL_REPLICA
Definition: xlog.h:75
@ WAL_LEVEL_LOGICAL
Definition: xlog.h:76
@ WAL_LEVEL_MINIMAL
Definition: xlog.h:74
bool CreateCheckPoint(int flags)
Definition: xlog.c:6961
XLogRecPtr GetFakeLSNForUnloggedRel(void)
Definition: xlog.c:4658
PGDLLIMPORT int XLogArchiveTimeout
Definition: xlog.c:120
void XLogPutNextOid(Oid nextOid)
Definition: xlog.c:8093
void XLogFlush(XLogRecPtr record)
Definition: xlog.c:2783
PGDLLIMPORT XLogRecPtr XactLastCommitEnd
Definition: xlog.c:257
PGDLLIMPORT int wal_level
Definition: xlog.c:133
PGDLLIMPORT bool wal_log_hints
Definition: xlog.c:125
RecoveryState
Definition: xlog.h:90
@ RECOVERY_STATE_CRASH
Definition: xlog.h:91
@ RECOVERY_STATE_DONE
Definition: xlog.h:93
@ RECOVERY_STATE_ARCHIVE
Definition: xlog.h:92
void XLogShutdownWalRcv(void)
Definition: xlog.c:9537
void issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli)
Definition: xlog.c:8759
PGDLLIMPORT int max_wal_size_mb
Definition: xlog.c:116
void XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN)
Definition: xlog.c:2612
PGDLLIMPORT bool track_wal_io_timing
Definition: xlog.c:139
bool XLogCheckpointNeeded(XLogSegNo new_segno)
Definition: xlog.c:2283
WalSyncMethod
Definition: xlog.h:23
@ WAL_SYNC_METHOD_OPEN
Definition: xlog.h:26
@ WAL_SYNC_METHOD_FDATASYNC
Definition: xlog.h:25
@ WAL_SYNC_METHOD_FSYNC_WRITETHROUGH
Definition: xlog.h:27
@ WAL_SYNC_METHOD_OPEN_DSYNC
Definition: xlog.h:28
@ WAL_SYNC_METHOD_FSYNC
Definition: xlog.h:24
uint64 XLogRecPtr
Definition: xlogdefs.h:21
uint32 TimeLineID
Definition: xlogdefs.h:63
uint64 XLogSegNo
Definition: xlogdefs.h:52