*** a/src/backend/access/transam/xlog.c
--- b/src/backend/access/transam/xlog.c
***************
*** 5663,5668 **** StartupXLOG(void)
--- 5663,5672 ----
  		ereport(LOG,
  				(errmsg("database system was shut down at %s",
  						str_time(ControlFile->time))));
+ 	else if (ControlFile->state == DB_SHUTDOWNED_IN_RECOVERY)
+ 		ereport(LOG,
+ 				(errmsg("database system was shut down in recovery at %s",
+ 						str_time(ControlFile->time))));
  	else if (ControlFile->state == DB_SHUTDOWNING)
  		ereport(LOG,
  				(errmsg("database system shutdown was interrupted; last known up at %s",
***************
*** 7550,7555 **** CreateRestartPoint(int flags)
--- 7554,7567 ----
  				  lastCheckPoint.redo.xlogid, lastCheckPoint.redo.xrecoff)));
  
  		UpdateMinRecoveryPoint(InvalidXLogRecPtr, true);
+ 		if (flags & CHECKPOINT_IS_SHUTDOWN)
+ 		{
+ 			LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
+ 			ControlFile->state = DB_SHUTDOWNED_IN_RECOVERY;
+ 			ControlFile->time = (pg_time_t) time(NULL);
+ 			UpdateControlFile();
+ 			LWLockRelease(ControlFileLock);
+ 		}
  		LWLockRelease(CheckpointLock);
  		return false;
  	}
***************
*** 7587,7592 **** CreateRestartPoint(int flags)
--- 7599,7606 ----
  		ControlFile->checkPoint = lastCheckPointRecPtr;
  		ControlFile->checkPointCopy = lastCheckPoint;
  		ControlFile->time = (pg_time_t) time(NULL);
+ 		if (flags & CHECKPOINT_IS_SHUTDOWN)
+ 			ControlFile->state = DB_SHUTDOWNED_IN_RECOVERY;
  		UpdateControlFile();
  	}
  	LWLockRelease(ControlFileLock);
*** a/src/bin/pg_controldata/pg_controldata.c
--- b/src/bin/pg_controldata/pg_controldata.c
***************
*** 57,62 **** dbState(DBState state)
--- 57,64 ----
  			return _("starting up");
  		case DB_SHUTDOWNED:
  			return _("shut down");
+ 		case DB_SHUTDOWNED_IN_RECOVERY:
+ 			return _("shut down in recovery");
  		case DB_SHUTDOWNING:
  			return _("shutting down");
  		case DB_IN_CRASH_RECOVERY:
*** a/src/include/catalog/pg_control.h
--- b/src/include/catalog/pg_control.h
***************
*** 65,70 **** typedef enum DBState
--- 65,71 ----
  {
  	DB_STARTUP = 0,
  	DB_SHUTDOWNED,
+ 	DB_SHUTDOWNED_IN_RECOVERY,
  	DB_SHUTDOWNING,
  	DB_IN_CRASH_RECOVERY,
  	DB_IN_ARCHIVE_RECOVERY,
