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

From Tom Lane
Subject Re: tuptoaster.c must *not* use SnapshotAny
Date
Msg-id 11166.1011202185@sss.pgh.pa.us
Whole thread Raw
In response to Re: tuptoaster.c must *not* use SnapshotAny  ("Zeugswetter Andreas SB SD" <ZeugswetterA@spardat.at>)
List pgsql-hackers
"Zeugswetter Andreas SB SD" <ZeugswetterA@spardat.at> writes:
>> 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) ?

No; it needs to *not* find dead rows resulting from a failed vacuum.
You are right that for the most part TOAST relies on time qualification
of the main-table row, and no doubt that was why Jan thought he could
code it like this; but vacuuming the TOAST table is not an operation
that affects the main table.

>> 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.

Wrong; see above.  We are talking about reshuffling rows in the TOAST
table that belong (presumably) to a live row in the main table.  During
the VACUUM there will be more than one copy of such rows.

>> (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 ...

You're right, lazy VACUUM doesn't create this issue.  My mistake.
But VACUUM FULL does.

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

Exactly.
        regards, tom lane


pgsql-hackers by date:

Previous
From: "Zeugswetter Andreas SB SD"
Date:
Subject: Re: tuptoaster.c must *not* use SnapshotAny
Next
From: Tom Lane
Date:
Subject: Re: tuptoaster.c must *not* use SnapshotAny