On 2020-Jul-20, Dilip Kumar wrote: > On Fri, Jul 17, 2020 at 4:16 PM Dilip Kumar <dilipbal...@gmail.com> wrote:
> > So if the vacuum_tolerate_damage is set then in > > all the cases in heap_prepare_freeze_tuple where the corrupted xid is > > detected, it will emit a warning and return that nothing is changed in > > the tuple and the 'tuple_totally_frozen' will also be set to false. > > Since we are returning false the caller will not try to freeze such > > tuple and the tuple_totally_frozen is also set to false so that the > > page will not be marked to all frozen even if all other tuples in the > > page are frozen. > Robert has mentioned at [1] that we probably should refuse to update > 'relfrozenxid/relminmxid' when we encounter such tuple and emit > WARNING instead of an error. Isn't this already happening per your description above? > I think we shall do that in some cases > but IMHO it's not a very good idea in all the cases. Basically, if > the xmin precedes the relfrozenxid then probably we should allow to > update the relfrozenxid whereas if the xmin precedes cutoff xid and > still uncommitted then probably we might stop relfrozenxid from being > updated so that we can stop CLOG from getting truncated. I'm not sure I understand 100% what you're talking about here (the first half seems dangerous unless you misspoke), but in any case it seems a pointless optimization. I mean, if the heap is corrupted, you can hope to complete the vacuum (which will hopefully return which *other* tuples are similarly corrupt) but trying to advance relfrozenxid is a lost cause. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services