From 51ef883125694733302bd0a3e8e137f410d8c185 Mon Sep 17 00:00:00 2001 From: Tender Wang Date: Sat, 29 Mar 2025 10:28:52 +0800 Subject: [PATCH] Fix cross-partition merge fail. --- src/backend/executor/execPartition.c | 1 + src/test/regress/expected/partition_prune.out | 28 +++++++++++++++++++ src/test/regress/sql/partition_prune.sql | 14 ++++++++++ 3 files changed, 43 insertions(+) diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 84ccd7d457d..8d1e3c0624f 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -956,6 +956,7 @@ ExecInitPartitionInfo(ModifyTableState *mtstate, EState *estate, NULL); break; case CMD_DELETE: + case CMD_NOTHING: break; default: diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out index 0bf35260b46..2f3e5db8252 100644 --- a/src/test/regress/expected/partition_prune.out +++ b/src/test/regress/expected/partition_prune.out @@ -4694,6 +4694,34 @@ table part_abc_view; 2 | c | t (2 rows) +rollback; +-- Cross-partition merge +begin; +explain (costs off) +merge into part_abc_view pt +using (select 3 as a) as q on pt.a = q.a +WHEN NOT MATCHED THEN INSERT VALUES (1, 2) +WHEN MATCHED THEN DO NOTHING; + QUERY PLAN +-------------------------------------- + Merge on part_abc + -> Nested Loop Left Join + -> Result + -> Result + One-Time Filter: false +(5 rows) + +merge into part_abc_view pt +using (select 3 as a) as q on pt.a = q.a +WHEN NOT MATCHED THEN INSERT VALUES (1, 2) +WHEN MATCHED THEN DO NOTHING; +table part_abc_view; + a | b | c +---+---+--- + 1 | 2 | + 2 | c | t +(2 rows) + rollback; -- A case with multiple ModifyTable nodes. begin; diff --git a/src/test/regress/sql/partition_prune.sql b/src/test/regress/sql/partition_prune.sql index f6db9479f54..339c8d9a4e8 100644 --- a/src/test/regress/sql/partition_prune.sql +++ b/src/test/regress/sql/partition_prune.sql @@ -1413,6 +1413,20 @@ when not matched then insert values (1, 'd', false) returning pt.a; table part_abc_view; rollback; +-- Cross-partition merge +begin; +explain (costs off) +merge into part_abc_view pt +using (select 3 as a) as q on pt.a = q.a +WHEN NOT MATCHED THEN INSERT VALUES (1, 2) +WHEN MATCHED THEN DO NOTHING; +merge into part_abc_view pt +using (select 3 as a) as q on pt.a = q.a +WHEN NOT MATCHED THEN INSERT VALUES (1, 2) +WHEN MATCHED THEN DO NOTHING; +table part_abc_view; +rollback; + -- A case with multiple ModifyTable nodes. begin; create table part_abc_log (action text, a int, b text, c bool); -- 2.34.1