On Tue, 28 Feb 2006, Bruce Momjian wrote:
> Tom Lane wrote:
>> Bruce Momjian <pgman@candle.pha.pa.us> writes:
>>> Tom Lane wrote:
>>>> MVCC goes out the window, eh? Not to mention transaction rollback ability?
>>
>>> If the old row is not visible to any transactions, why would it not work?
>>
>> The old row is ALWAYS visible to somebody, until you commit (if you ever
>> do). You can't simply overwrite existing data.
>
> Huh, I am not suggesting overwriting tuples you created, but tuples
> created by earlier transactions and now invisible to everyone.
>
> I should be clearer. Suppose you have a table with a single index on
> the primary key. You are updating the row over and over again (a
> typical case). You create the first row, commit, then it is updated
> (two copies), commit, then you update it again. That first created row
> might not be visible to anyone, but has the same index value as the new
> row you are about to add. Why not reused that heap tuple?
Index tuples have commit info hint bits in them, don't they? You would
still have to update those.
- Heikki