<代码> StartupLOG:: →记录=ReadCheckpointRecord (xlogreader ControlFile→检查点,1,真的) →记录=ReadRecord (xlogreader ControlFile→检查点,日志,真的) →记录=XLogReadRecord (xlogreader ControlFile→检查点,,errormsg); →readOff=ReadPageInternal(状态,ControlFile→检查点——(ControlFile→检查点% XLOG_BLCKSZ)、Min (ontrolFile→检查点% XLOG_BLCKSZ + SizeOfXLogRecord XLOG_BLCKSZ)); →|——pageptr=ControlFile→检查点——(ControlFile→检查点% XLOG_BLCKSZ) |——targetPageOff=(pageptr % XLogSegSize);//段文件偏移 |——targetSegmentPtr=pageptr - targetPageOff; |——readLen=状态→read_page(状态,targetSegmentPtr (0 ?), XLOG_BLCKSZ, ControlFile→检查点,状态→readBuf,和状态→readPageTLI); →WaitForWALToBecomeAvailable (targetSegmentPtr (0) + XLOG_BLCKSZ,私人→randAccess, 1, targetRecPtr) →readFile=XLogFileReadAnyTLI (targetSegmentPtr/XLogSegSize DEBUG2, currentSource==XLOG_FROM_ARCHIVE吗?XLOG_FROM_ANY currentSource): →fd=XLogFileRead (segno、emode, tli XLOG_FROM_ARCHIVE或者XLOG_FROM_PG_WAL,真的) →fd=BasicOpenFile(路径,O_RDONLY | PG_BINARY, 0); →fd=open (fileName, fileFlags fileMode) 代码>