*** a/src/bin/pg_controldata/pg_controldata.c --- b/src/bin/pg_controldata/pg_controldata.c *************** *** 24,29 **** --- 24,30 ---- #include #include "access/xlog.h" + #include "access/xlog_internal.h" #include "catalog/pg_control.h" *************** *** 95,100 **** main(int argc, char *argv[]) --- 96,103 ---- char sysident_str[32]; const char *strftime_fmt = "%c"; const char *progname; + XLogSegNo segno; + char xlogfilename[MAXFNAMELEN]; set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_controldata")); *************** *** 171,176 **** main(int argc, char *argv[]) --- 174,186 ---- localtime(&time_tmp)); /* + * Calculate the WAL file name containing the latest checkpoint's REDO + * record. + */ + XLByteToSeg(ControlFile.checkPointCopy.redo, segno); + XLogFileName(xlogfilename, ControlFile.checkPointCopy.ThisTimeLineID, segno); + + /* * Format system_identifier separately to keep platform-dependent format * code out of the translatable message string. */ *************** *** 201,206 **** main(int argc, char *argv[]) --- 211,218 ---- printf(_("Latest checkpoint's REDO location: %X/%X\n"), (uint32) (ControlFile.checkPointCopy.redo >> 32), (uint32) ControlFile.checkPointCopy.redo); + printf(_("Latest checkpoint's REDO WAL file: %s\n"), + xlogfilename); printf(_("Latest checkpoint's TimeLineID: %u\n"), ControlFile.checkPointCopy.ThisTimeLineID); printf(_("Latest checkpoint's full_page_writes: %s\n"),