前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL启动恢复期间,恢复到的时间线的确定

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

作者头像
星哥玩云
发布2022-08-17 20:11:35
6460
发布2022-08-17 20:11:35
举报
文章被收录于专栏:开源部署开源部署

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;   }  }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档