From: | Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at> |
---|---|
To: | Nikita Malakhov <hukutoc(at)gmail(dot)com> |
Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Tuples inserted and deleted by the same transaction |
Date: | 2022-09-13 10:04:04 |
Message-ID: | 2e215df8b26d665fa7152157707c0e5afd0db02e.camel@cybertec.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, 2022-09-13 at 11:47 +0300, Nikita Malakhov wrote:
> On Tue, Sep 13, 2022 at 11:06 AM Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2022-09-13 10:07:40 | Re: pgsql: Prefetch data referenced by the WAL, take II. |
Previous Message | Alvaro Herrera | 2022-09-13 10:01:47 | Re: [PATCH v1] fix potential memory leak in untransformRelOptions |