pg10-ExecInitModifyTable-root-table-fix.patch
application/octet-stream
Filename: pg10-ExecInitModifyTable-root-table-fix.patch
Type: application/octet-stream
Part: 1
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/executor/nodeModifyTable.c | 2 | 13 |
| src/test/regress/expected/inherit.out | 9 | 0 |
| src/test/regress/sql/inherit.sql | 3 | 0 |
diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c
index 7de4568b03..fe29a81c1b 100644
--- a/src/backend/executor/nodeModifyTable.c
+++ b/src/backend/executor/nodeModifyTable.c
@@ -1934,15 +1934,8 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
estate->es_result_relation_info = saved_resultRelInfo;
/* The root table RT index is at the head of the partitioned_rels list */
- if (node->partitioned_rels)
- {
- Index root_rti;
- Oid root_oid;
-
- root_rti = linitial_int(node->partitioned_rels);
- root_oid = getrelid(root_rti, estate->es_range_table);
- rel = heap_open(root_oid, NoLock); /* locked by InitPlan */
- }
+ if (mtstate->rootResultRelInfo)
+ rel = mtstate->rootResultRelInfo->ri_RelationDesc;
else
rel = mtstate->resultRelInfo->ri_RelationDesc;
@@ -2134,10 +2127,6 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
mtstate->ps.ps_ExprContext = NULL;
}
- /* Close the root partitioned rel if we opened it above. */
- if (rel != mtstate->resultRelInfo->ri_RelationDesc)
- heap_close(rel, NoLock);
-
/*
* If needed, Initialize target list, projection and qual for ON CONFLICT
* DO UPDATE.
diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out
index da7608734c..79ea0c5774 100644
--- a/src/test/regress/expected/inherit.out
+++ b/src/test/regress/expected/inherit.out
@@ -665,6 +665,15 @@ select tableoid::regclass::text as relname, parted_tab.* from parted_tab order b
parted_tab_part3 | 3 | a
(3 rows)
+-- modifies partition key, but no rows will actually be updated
+explain update parted_tab set a = 2 where false;
+ QUERY PLAN
+--------------------------------------------------------
+ Update on parted_tab (cost=0.00..0.00 rows=0 width=0)
+ -> Result (cost=0.00..0.00 rows=0 width=0)
+ One-Time Filter: false
+(3 rows)
+
drop table parted_tab;
drop table some_tab cascade;
NOTICE: drop cascades to table some_tab_child
diff --git a/src/test/regress/sql/inherit.sql b/src/test/regress/sql/inherit.sql
index bbe453cf26..101a0394f8 100644
--- a/src/test/regress/sql/inherit.sql
+++ b/src/test/regress/sql/inherit.sql
@@ -168,6 +168,9 @@ from
where parted_tab.a = ss.a;
select tableoid::regclass::text as relname, parted_tab.* from parted_tab order by 1,2;
+-- modifies partition key, but no rows will actually be updated
+explain update parted_tab set a = 2 where false;
+
drop table parted_tab;
drop table some_tab cascade;