Re: BUG #18871: Cross-partition MERGE fails with unclear internal error
Tender Wang <tndrwang@gmail.com>
From: Tender Wang <tndrwang@gmail.com>
To: exclusion@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2025-03-28T16:39:58Z
Lists: pgsql-bugs
PG Bug reporting form <noreply@postgresql.org> 于2025年3月28日周五 22:49写道:
> The following bug has been logged on the website:
>
> Bug reference: 18871
> Logged by: Alexander Lakhin
> Email address: exclusion@gmail.com
> PostgreSQL version: 17.4
> Operating system: Ubuntu 24.04
> Description:
>
> The following script:
> CREATE TABLE pt(a int, b int) PARTITION BY LIST(a);
> CREATE TABLE p1 PARTITION OF pt FOR VALUES IN (a);
>
> MERGE INTO pt USING (SELECT 2 AS a) AS q ON pt.a = q.a
> WHEN NOT MATCHED THEN INSERT VALUES (1, 2)
> WHEN MATCHED THEN DO NOTHING;
> fails with:
> ERROR: XX000: unknown action in MERGE WHEN clause
> LOCATION: ExecInitPartitionInfo, execPartition.c:962
>
> This error is triggered on REL_15_STABLE (starting from bf5c4b3d9) ..
> master.
> Before bf5c4b3d9, the MERGE produced ERROR: variable not found in subplan
> target lists.
>
> This anomaly is discovered with SQLsmith.
>
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.
--
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 →
-
Fix MERGE with DO NOTHING actions into a partitioned table.
- 8b6a0e2392b9 18.0 landed
- 14a33d3f0ae6 15.13 landed
- 8d4cd3b4a887 16.9 landed
- 25303678a1d3 17.5 landed