On Wed, Oct 26, 2016 at 12:39 PM, Michael Paquier <michael.paqu...@gmail.com> wrote: > On Wed, Oct 26, 2016 at 1:40 PM, Amit Kapila <amit.kapil...@gmail.com> wrote: >> If you are inclined towards this solution, then I think what we need >> to do is to change the API UpdateMinRecoveryPoint() such that it's >> second parameter can take three values. 0 means update >> minRecoveryPoint to passed lsn if minRecoveryPoint < lsn; 1 means >> update minRecoveryPoint to latest replayed point if minRecoveryPoint < >> lsn, same as currently false for *force*; 2 indicates same behaviour >> as current *force* as true. Also we need to pass currentTLI parameter >> (lastCheckPoint.ThisTimeLineID) to this API to update >> minRecoveryPointTLI. I have not tried this, but I think something on >> these lines should work. > > 0 is the behavior that you get when force = false, so it works as 1, no? >
I don't think so. Refer below code: UpdateMinRecoveryPoint() { .. else if (force || minRecoveryPoint < lsn) { /* * To avoid having to update the control file too often, we update it * all the way to the last record being replayed, even though 'lsn' * would suffice for correctness. This also allows the 'force' case * to not need a valid 'lsn' value. .. } If my understanding is right, then the changes proposed by you as below is not what is intended here. I think you need to do something as I have mentioned above. + /* + * Update minRecoveryPoint just past the last redo checkpoint if + * necessary. This ensures that at next startup minRecoveryPoint will + * not be past the next point it would start at, preventing any + * weird behaviors with for example backups taken from standbys that + * rely on minRecoveryPoint as end backup location. + */ + UpdateMinRecoveryPoint(RedoRecPtr, false); + -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers