On Tue, 2022-09-13 at 11:47 +0300, Nikita Malakhov wrote: > On Tue, Sep 13, 2022 at 11:06 AM Laurenz Albe <laurenz.a...@cybertec.at> > wrote: > > Shouldn't such tuples be considered dead right away, even if the inserting > > transaction is still active? That would allow cleaning them up even before > > the transaction is done. > > > > There is this code in HeapTupleSatisfiesVacuumHorizon: > > > > else if > > (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetRawXmin(tuple))) > > { > > [...] > > /* inserted and then deleted by same xact */ > > if > > (TransactionIdIsCurrentTransactionId(HeapTupleHeaderGetUpdateXid(tuple))) > > return HEAPTUPLE_DELETE_IN_PROGRESS; > > > > Why HEAPTUPLE_DELETE_IN_PROGRESS and not HEAPTUPLE_DEAD? > > Please correct me if I'm wrong, despite tuples being inserted and deleted by > the same > transaction - they are visible inside the transaction and usable by it, so > considering them > dead and cleaning up during execution is a bad idea until the transaction is > ended.
But once they are deleted or updated, even the transaction that created them cannot see them any more, right? Yours, Laurenz Albe