Re: tuptoaster.c must *not* use SnapshotAny
От | Tom Lane |
---|---|
Тема | Re: tuptoaster.c must *not* use SnapshotAny |
Дата | |
Msg-id | 11166.1011202185@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: tuptoaster.c must *not* use SnapshotAny ("Zeugswetter Andreas SB SD" <ZeugswetterA@spardat.at>) |
Список | 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 по дате отправления: