PostgreSQL启动恢复期间,恢复到的时间线的确定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL启动恢复期间,恢复到的时间线的确定相关的知识,希望对你有一定的参考价值。

1、启动恢复时,确定恢复到的时间线recoveryTargetTLI

1)归档恢复点比checkpoint中记录的时间线大,那么选择归档恢复点作为目标时间线

2)否则,checkpoint记录中的时间线作为目标时间线

StartupXLOG->
	if (ControlFile->minRecoveryPointTLI >
		ControlFile->checkPointCopy.ThisTimeLineID)
		recoveryTargetTLI = ControlFile->minRecoveryPointTLI;
	else
		recoveryTargetTLI = ControlFile->checkPointCopy.ThisTimeLineID;
	...

2、接着从recovery.conf文件中读取

1)若设置了recovery_target_timeline值,并且设为latest,那么history列表最大的时间线即为目标时间线

2)否则是recovery.conf文件中设置的时间线值

3)若没有设置recovery_target_timeline值,则目标时间线为第一步中的值

StartupXLOG->readRecoveryCommandFile()->
	for (item = head; item; item = item->next){
		if (strcmp(item->name, "restore_command") == 0){
			...
		}else if ...
		else if(strcmp(item->name, "recovery_target_timeline") == 0){
			rtliGiven = true;
			if (strcmp(item->value, "latest") == 0)
				rtli = 0;
			else
				rtli = (TimeLineID) strtoul(item->value, NULL, 0);
		}else if...
	}
	if (rtliGiven){
		if (rtli){
			recoveryTargetTLI = rtli;
			recoveryTargetIsLatest = false;
		}else{
			/* We start the "latest" search from pg_control's timeline */
			recoveryTargetTLI = findNewestTimeLine(recoveryTargetTLI);
			recoveryTargetIsLatest = true;
		}
	}


以上是关于PostgreSQL启动恢复期间,恢复到的时间线的确定的主要内容,如果未能解决你的问题,请参考以下文章

从原始物理文件中恢复 postgreSQL 数据库

PostgreSQL启动恢复读取checkpoint记录失败的条件

PostgreSQL启动恢复通过checkpoint open wal文件

Swift 中的 iOS 8 和 9:首次启动期间 [警告:无法创建正在进行的恢复标记文件]

从数据库启动日志看PostgreSQL的崩溃恢复

PPAS数据库备份与恢复