Hi, On 2016-06-16 13:19:13 -0500, Kevin Grittner wrote: > On Thu, Jun 16, 2016 at 11:54 AM, Andres Freund <and...@anarazel.de> wrote: > > On 2016-06-16 12:43:34 -0400, Robert Haas wrote: > > >> The root of my confusion is: if we prune a tuple, we'll bump the page > >> LSN, so any session that is still referencing that tuple will error > >> out as soon as it touches the page on which that tuple used to exist. > > > > Right. On the main table. But we don't peform that check on the toast > > table/pages. So if we prune toast tuples, which are still referenced by > > (unvacuumed) main relation, we can get into trouble. > > I thought that we should never be using visibility information from > the toast table; that the visibility information in the heap should > control.
We use visibility information for vacuuming, toast vacuum puts toast chunk tuples through HeapTupleSatisfiesVacuum(), just like for normal tuples. Otherwise we'd have to collect dead toast tuples during the normal vacuum, and then do explicit vacuums for those. That'd end up being pretty expensive. > If that's the case, how would we prune toast rows without > pruning the heap? I'm not sure what you mean? We prune toast tuples by checking xmin/xmax, and then comparing with OldestXmin. Without STO that's safe, because we know nobody could lookup up those toast tuples. > You pointed out that the *reverse* case has an > option bit -- if that is ever set there could be toasted values > which would not have a row. We vacuum toast tables without the main table, by simply calling vacuum() on the toast relation. So you can get the case that only the normal relation is vacuumed *or* that only the toast relation is vacuumed. > Do they still have a line pointer in the heap, like "dead" index > entries? You can have non-pruned toast tuples, where any evidence of the referencing main-heap tuple is gone. > How are they cleaned up in current production versions? There's simply no interlock except OldestXmin preveting referenced toast tuples to be vacuumed, as long as any alive snapshot can read them. Greetings, Andres Freund -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers