Hi! 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.
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? > > Yours, > Laurenz Albe > > > -- Regards, Nikita Malakhov Postgres Professional https://postgrespro.ru/