Re: tuptoaster.c must *not* use SnapshotAny - Mailing list pgsql-hackers

From Zeugswetter Andreas SB SD
Subject Re: tuptoaster.c must *not* use SnapshotAny
Date
Msg-id 46C15C39FEB2C44BA555E356FBCD6FA41EB4B5@m0114.s-mxs.net
Whole thread Raw
In response to tuptoaster.c must *not* use SnapshotAny  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: tuptoaster.c must *not* use SnapshotAny  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
> The tuple toaster currently fetches toast-table rows using SnapshotAny.
> This is quite uncool, because it will in fact find *any* row.

Well, doesn't it need to find *any* row, since the accesses to heap and toast
are not "atomic" (not interlocked) ?

>  Including dead rows resulting from an aborted

But then also the heap tuple is aborted, and thus a normal select will not
select that toast anyway.

> (or, in 7.2, still-in-progress)
> VACUUM.

I thought new vacuum did not move tuples ? Why should it then produce 
two rows ? And VACUUM FULL locks the table so ...

I think SnapshotSelf could have concurrency problems (not see a toast
that someone else committed between our heap read and toast read)
IIRC, at the time at least SnapshotAny was chosen on purpose.

Might it be a problem, that VACUUM sets xids to FrozenXid, and we always
consider that one Valid, even if that vacuum is still in progress ? 

I can only see a problem with a partway through vacuum full, that aborted.

Andreas

PS: short desc between Any and Self, anybody ?


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: tuptoaster.c must *not* use SnapshotAny
Next
From: Peter Eisentraut
Date:
Subject: Re: backend/po, make update-po works strange