Re: BUG #18871: Cross-partition MERGE fails with unclear internal error

Tender Wang <tndrwang@gmail.com>

From: Tender Wang <tndrwang@gmail.com>
To: Dean Rasheed <dean.a.rasheed@gmail.com>
Cc: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2025-03-29T02:39:12Z
Lists: pgsql-bugs

Attachments

Dean Rasheed <dean.a.rasheed@gmail.com> 于2025年3月29日周六 02:29写道:

> On Fri, 28 Mar 2025 at 16:40, Tender Wang <tndrwang@gmail.com> wrote:
> >
> > I tried a quick fix by adding "case CMD_NOTHING" after "case CMD_DELETE"
> like below:
> >
> > case CMD_DELETE:
> > case CMD_NOTHING:
> >        break;
> >
> > It can work, and all regression tests pass.  But I don't look into more
> details.  This solution may not fix the root cause.
>
> Yes, that looks like the right fix.
>
> This appears to be a trivial oversight in ExecInitPartitionInfo(). I
> did a quick scan of other places that look at action->commandType and
> I didn't see any others that overlook CMD_NOTHING.
>

Yes, indeed. I double-check it.
In ExecInitPartitionInfo(), it has comments like:

* This duplicates much of the logic in ExecInitMerge(), so something
* changes there, look here too.

ExecInitMerge() considers CMD_NOTHING operation.
I give the attached fix.

-- 
Thanks,
Tender Wang

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix MERGE with DO NOTHING actions into a partitioned table.