Re: BUG #19760: CLUSTER loses a row the transaction inserted and then updated in a rolled-back subtransaction

From: Takeshi Ideriha <iderihatakeshi(at)gmail(dot)com>
To: Michael Paquier <michael(at)paquier(dot)xyz>, Zhijie Hou <houzhijie22(at)gmail(dot)com>
Cc: shihao zhong <zhong950419(at)gmail(dot)com>, Ayush Tiwari <ayushtiwari(dot)slg01(at)gmail(dot)com>, alpkeles99(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #19760: CLUSTER loses a row the transaction inserted and then updated in a rolled-back subtransaction
Date: 2026-10-22 02:53:29
Message-ID: a30056b5-be05-41f7-93fe-6b2c7d6b2dd6@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hi

>
> What I am really wondering is why do we actually need to fix *two*
> problems at once? The first SetHintBits() looks like a no-brainer to
> me, and links to the second permutation in the test "s1_plain
> s1_count" where we do a CLUSTER after an UPDATE rollbacked to a
> previous savepoint. I don't think that there is a need for an
> isolation test on this one, either, wouldn't a plain SQL sequence be
> sufficient?
>

> So the first step to me would be a "Divide and Conquer" strategy,
> where we should look at each problem independently instead of trying
> to do too much at once.
Thank you for sorting the issue out and setting the direction. I was
thinking of leaving first SetHintBits() in
HeapTupleSatisfiesVacuumHorizon() and moving the second SetHintBits() to
heapam_relation_copy_for_cluster() to solve the performance issue.
However, it would still be another API violation, wouldn't it? We also
needs to figure out the multixact race issue. I'm trying to look into
multixact part as much as possible.

Regards,
Takeshi Ideriha

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Michael Paquier 2026-10-22 03:09:56 Re: pg_stat_statements stores WITH HOLD cursor query with literals
Previous Message Michael Paquier 2026-10-22 02:22:08 Re: BUG #19760: CLUSTER loses a row the transaction inserted and then updated in a rolled-back subtransaction