Hi
I have reported a bug via PostgreSQL bug report form, but havent got any 
response so far.
This might not be a bug, but a feature not implemented yet.
I have created an suggestion to make a small addition to StartupXLOG.c to solve 
the issue.

Any suggestions?

--
Leif Gunnar Erlandsen

-------- Videresendt melding -------
Fra: l...@lako.no (mailto:l...@lako.no)
Til: "Jeff Janes" <jeff.ja...@gmail.com 
(mailto:jeff.ja...@gmail.com?to=%22Jeff%20Janes%22%20<jeff.ja...@gmail.com>)>, 
pgsql-b...@lists.postgresql.org (mailto:pgsql-b...@lists.postgresql.org)
Sendt: 12. januar 2019 kl. 08:40
Emne: Re: BUG #15589: Due to missing wal, restore ends prematurely and opens 
database for read/write
"Jeff Janes" <jeff.ja...@gmail.com 
(mailto:jeff.ja...@gmail.com?to=%22Jeff%20Janes%22%20<jeff.ja...@gmail.com>)> 
skrev 11. januar 2019 kl. 15:03:
 On Fri, Jan 11, 2019 at 4:08 AM PG Bug reporting form <nore...@postgresql.org 
(mailto:nore...@postgresql.org)> wrote: 
PostgreSQL should have paused recovery also on the first scenario. Then I
could have added missing wal and continued with restore. 
At the least, I think we should log an explicit WARNING if the WAL stream ends 
before the specified PIT is reached. 
  The documentation for recovery.conf states that with recovery_target_time set 
recovery_target_action defaults to pause.
Even if stop point is not reached, pause should be activated.
After checking the source this might be solved with a small addition in 
StartupXLOG.c
Someone with more experience with the source code should check this out. 
 if (reachedStopPoint)  
{ 
 if (!reachedConsistency)  
 ereport(FATAL,  
 (errmsg("requested recovery stop point is before consistent recovery 
point")));  
/* 
* This is the last point where we can restart recovery with a 
* new recovery target, if we shutdown and begin again. After 
* this, Resource Managers may choose to do permanent 
* corrective actions at end of recovery. 
*/ 
 switch (recoveryTargetAction)  
{ 
 case RECOVERY_TARGET_ACTION_SHUTDOWN:  
/* 
* exit with special return code to request shutdown 
* of postmaster. Log messages issued from 
* postmaster. 
*/ 
 proc_exit(3);  
 case RECOVERY_TARGET_ACTION_PAUSE:  
 SetRecoveryPause(true);  
 recoveryPausesHere();  
/* drop into promote */ 
 case RECOVERY_TARGET_ACTION_PROMOTE:  
 break;  
} 
 /* Add these lines .... */   
 } else if (recoveryTarget == RECOVERY_TARGET_TIME)  
{ 
/* 
* Stop point not reached but next WAL could not be read 
* Some explanation and warning should be logged 
*/ 
 switch (recoveryTargetAction)  
{ 
 case RECOVERY_TARGET_ACTION_PAUSE:  
 SetRecoveryPause(true);  
 recoveryPausesHere();  
 break;  
} 
} 
/* .... until here */  
--

Leif

Reply via email to