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/

Reply via email to