Hi, On 2021-05-16 18:21:21 -0400, Tom Lane wrote: > Peter Geoghegan <p...@bowt.ie> writes: > > On Sun, May 16, 2021 at 1:23 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > >> And the reason oldestXID contains that is that pg_upgrade applied > >> pg_resetwal, which does this: > >> * For the moment, just set oldestXid to a value that will force > >> * immediate autovacuum-for-wraparound. > > > This same pg_resetwal code has probably caused quite a few problems on > > pg_upgrade'd databases: > > https://postgr.es/m/20210423234256.hwopuftipdmp3...@alap3.anarazel.de > > Hm, yeah. I'm not sure if transferring the value forward from the > old cluster is entirely safe, but if it is, that seems like a > promising route to a fix. (We should still have more sanity checking > around the GlobalVis code, though.)
Why would it not be safe? Or at least safer than what we're doing right now? It definitely isn't safe to use a newer value than what the old cluster used - tables might have older tuples. And an older value than the old cluster's means that we can either accidentally wrap around without being protected or that a cluster might shut down to prevent a wraparound. And after the pg_resetwal we can't assign xids that are older than set_xid - so it won't become inaccurate? I think we should remove the heuristic thing from pg_resetwal entirely, and error out if next-xid is set to something too far away from oldest xid, unless oldexid is also specified. Greetings, Andres Freund