158 lines
5.2 KiB
C
158 lines
5.2 KiB
C
/*
|
|
* xlogrecovery.h
|
|
*
|
|
* Functions for WAL recovery and standby mode
|
|
*
|
|
* Portions Copyright (c) 1996-2022, 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 char *PromoteTriggerFile;
|
|
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 *wasShutdownPtr, bool *haveBackupLabel, bool *haveTblspcMap);
|
|
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 */
|