> I admit that the implementation is much complex, but I can 
> not see any big problems to save the dead tuples out and read 
> it in again(like two phase commit does). Why do we need to 
> hold the lock and transaction? We can open the lock and 
> abandon the transaction ID, vacuum can take the lock and get 

> a new ID when restarting. Why do we need to worry about if 
> the dead tuple is still alive, only vacuum will sweep them, 
> HOT can not touch the tuple until we have finished sweeping.

One imho important (not necessarily mandatory) aspect of HOT is, that it
does parts of what vacuum would usually do.

        1. resume, load ctid list
        2. continue filling ctid list
        3. remove index tuples for these ctids (* problem *)

You have just removed index entries for possibly now live tuples that
have been reused by HOT.
Unless ...


---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at


Reply via email to