/*
* xlogrecovery . h
*
* Functions for WAL recovery and standby mode
*
* Portions Copyright ( c ) 1996 - 2025 , PostgreSQL Global Development Group
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
* src / include / access / xlogrecovery . h
*/
#ifndef XLOGRECOVERY_H
#define XLOGRECOVERY_H
#include "access/xlogreader.h"
#include "catalog/pg_control.h"
#include "lib/stringinfo.h"
#include "utils/timestamp.h"
/*
* Recovery target type .
* Only set during a Point in Time recovery , not when in standby mode .
*/
typedef enum
{
RECOVERY_TARGET_UNSET,
RECOVERY_TARGET_XID,
RECOVERY_TARGET_TIME,
RECOVERY_TARGET_NAME,
RECOVERY_TARGET_LSN,
RECOVERY_TARGET_IMMEDIATE,
} RecoveryTargetType;
/*
* Recovery target TimeLine goal
*/
typedef enum
{
RECOVERY_TARGET_TIMELINE_CONTROLFILE,
RECOVERY_TARGET_TIMELINE_LATEST,
RECOVERY_TARGET_TIMELINE_NUMERIC,
} RecoveryTargetTimeLineGoal;
/* Recovery pause states */
typedef enum RecoveryPauseState
{
RECOVERY_NOT_PAUSED, /* pause not requested */
RECOVERY_PAUSE_REQUESTED, /* pause requested, but not yet paused */
RECOVERY_PAUSED, /* recovery is paused */
} RecoveryPauseState;
/* User-settable GUC parameters */
extern PGDLLIMPORT bool recoveryTargetInclusive;
extern PGDLLIMPORT int recoveryTargetAction;
extern PGDLLIMPORT int recovery_min_apply_delay;
extern PGDLLIMPORT char *PrimaryConnInfo;
extern PGDLLIMPORT char *PrimarySlotName;
extern PGDLLIMPORT char *recoveryRestoreCommand;
extern PGDLLIMPORT char *recoveryEndCommand;
extern PGDLLIMPORT char *archiveCleanupCommand;
/* indirectly set via GUC system */
extern PGDLLIMPORT TransactionId recoveryTargetXid;
extern PGDLLIMPORT char *recovery_target_time_string;
extern PGDLLIMPORT TimestampTz recoveryTargetTime;
extern PGDLLIMPORT const char *recoveryTargetName;
extern PGDLLIMPORT XLogRecPtr recoveryTargetLSN;
extern PGDLLIMPORT RecoveryTargetType recoveryTarget;
extern PGDLLIMPORT bool wal_receiver_create_temp_slot;
extern PGDLLIMPORT RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal;
extern PGDLLIMPORT TimeLineID recoveryTargetTLIRequested;
extern PGDLLIMPORT TimeLineID recoveryTargetTLI;
/* Have we already reached a consistent database state? */
extern PGDLLIMPORT bool reachedConsistency;
/* Are we currently in standby mode? */
extern PGDLLIMPORT bool StandbyMode;
extern Size XLogRecoveryShmemSize(void );
extern void XLogRecoveryShmemInit(void );
extern void InitWalRecovery(ControlFileData *ControlFile,
bool *wasShutdown_ptr, bool *haveBackupLabel_ptr,
bool *haveTblspcMap_ptr);
extern void PerformWalRecovery(void );
/*
* FinishWalRecovery ( ) returns this . It contains information about the point
* where recovery ended , and why it ended .
*/
typedef struct
{
/*
* Information about the last valid or applied record , after which new WAL
* can be appended . ' lastRec ' is the position where the last record
* starts , and ' endOfLog ' is its end . ' lastPage ' is a copy of the last
* partial page that contains endOfLog ( or NULL if endOfLog is exactly at
* page boundary ) . ' lastPageBeginPtr ' is the position where the last page
* begins .
*
* endOfLogTLI is the TLI in the filename of the XLOG segment containing
* the last applied record . It could be different from lastRecTLI , if
* there was a timeline switch in that segment , and we were reading the
* old WAL from a segment belonging to a higher timeline .
*/
XLogRecPtr lastRec; /* start of last valid or applied record */
TimeLineID lastRecTLI;
XLogRecPtr endOfLog; /* end of last valid or applied record */
TimeLineID endOfLogTLI;
XLogRecPtr lastPageBeginPtr; /* LSN of page that contains endOfLog */
char *lastPage; /* copy of the last page, up to endOfLog */
/*
* abortedRecPtr is the start pointer of a broken record at end of WAL
* when recovery completes ; missingContrecPtr is the location of the first
* contrecord that went missing . See CreateOverwriteContrecordRecord for
* details .
*/
XLogRecPtr abortedRecPtr;
XLogRecPtr missingContrecPtr;
/* short human-readable string describing why recovery ended */
char *recoveryStopReason;
/*
* If standby or recovery signal file was found , these flags are set
* accordingly .
*/
bool standby_signal_file_found;
bool recovery_signal_file_found;
} EndOfWalRecoveryInfo;
extern EndOfWalRecoveryInfo *FinishWalRecovery(void );
extern void ShutdownWalRecovery(void );
extern void RemovePromoteSignalFiles(void );
extern bool HotStandbyActive(void );
extern XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI);
extern RecoveryPauseState GetRecoveryPauseState(void );
extern void SetRecoveryPause(bool recoveryPause);
extern void GetXLogReceiptTime(TimestampTz *rtime, bool *fromStream);
extern TimestampTz GetLatestXTime(void );
extern TimestampTz GetCurrentChunkReplayStartTime(void );
extern XLogRecPtr GetCurrentReplayRecPtr(TimeLineID *replayEndTLI);
extern bool PromoteIsTriggered(void );
extern bool CheckPromoteSignal(void );
extern void WakeupRecovery(void );
extern void StartupRequestWalReceiverRestart(void );
extern void XLogRequestWalReceiverReply(void );
extern void RecoveryRequiresIntParameter(const char *param_name, int currValue, int minValue);
extern void xlog_outdesc(StringInfo buf, XLogReaderState *record);
#endif /* XLOGRECOVERY_H */
Messung V0.5 in Prozent C=95 H=79 G=87
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-08)
¤
*© Formatika GbR, Deutschland