On Tue, Mar 27, 2018 at 11:41 AM, Tom Lane <t...@sss.pgh.pa.us> wrote: > Pavan Deolasee <pavan.deola...@gmail.com> writes: >> On Tue, Mar 27, 2018 at 7:28 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: >>> If you have to search backwards, this breaks it. Full stop. > >> We don't really need to fetch the previous record. We really need to find >> the last checkpoint prior to a given LSN. That can be done by reading WAL >> segments forward. It can be a little slow, but hopefully not a whole lot. > > This is ignoring the possibility of damaged data in between, ie > > A ... B ... CHKPT ... C ... a few zeroed pages ... D ... CHKPT ... E ... F > > If A is the start of the WAL segment, and you ask what's the last > checkpoint before F, you will get the wrong answer. Or, if you're > paranoid and verify that you can follow the chain all the way to F, > you'll fail ... needlessly, and in a case where we previously succeeded.
It's hard for me to believe that this case matters very much. If you're trying to run pg_rewind on a system where the WAL segments contain a few zeroed pages, you're probably going to be hosed anyway, if not by this particular thing then by something else. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company