Hi, On 2022-03-31 09:58:18 -0700, Peter Geoghegan wrote: > On Thu, Mar 31, 2022 at 9:37 AM Andres Freund <and...@anarazel.de> wrote: > > The only place that appears to access rd_rel->relfrozenxid outside of DDL is > > heap_abort_speculative(). > > I wonder how necessary that really is. Even if the XID is before > relfrozenxid, does that in itself really make it "in the future"? > Obviously it's often necessary to make the assumption that allowing > wraparound amounts to allowing XIDs "from the future" to exist, which > is dangerous. But why here? Won't pruning by VACUUM eventually correct > the issue anyway?
I don't think we should weaken defenses against xids from before relfrozenxid in vacuum / amcheck / .... If anything we should strengthen them. Isn't it also just plainly required for correctness? We'd not necessarily trigger a vacuum in time to remove the xid before approaching wraparound if we put in an xid before relfrozenxid? That happening in prune_xid is obviously les bad than on actual data, but still. ISTM we should just use our own xid. Yes, it might delay cleanup a bit longer. But unless there's already crud on the page (with prune_xid already set, the abort of the speculative insertion isn't likely to make the difference? Greetings, Andres Freund