]> granicus.if.org Git - postgresql/commitdiff
Remove useless lookup of root partitioned rel in ExecInitModifyTable().
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Jan 2018 19:44:15 +0000 (14:44 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Jan 2018 19:44:15 +0000 (14:44 -0500)
node->partitioned_rels is only set in UPDATE/DELETE cases, but
ExecInitModifyTable only uses its "rel" variable in INSERT cases,
so the extra logic to find the root rel is just a waste of complexity
and cycles.

Etsuro Fujita, reviewed by Amit Langote

Discussion: https://postgr.es/m/93cf9816-2f7d-0f67-8ed2-4a4e497a6ab8@lab.ntt.co.jp

src/backend/executor/nodeModifyTable.c

index 55dff5b21a6eb0ae4a54481829c6f0379f9df23d..c5eca1bb74c994b3920f78028457b31dd4866403 100644 (file)
@@ -46,7 +46,6 @@
 #include "foreign/fdwapi.h"
 #include "miscadmin.h"
 #include "nodes/nodeFuncs.h"
-#include "parser/parsetree.h"
 #include "storage/bufmgr.h"
 #include "storage/lmgr.h"
 #include "utils/builtins.h"
@@ -1932,20 +1931,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 */
-       }
-       else
-               rel = mtstate->resultRelInfo->ri_RelationDesc;
-
        /* Build state for INSERT tuple routing */
+       rel = mtstate->resultRelInfo->ri_RelationDesc;
        if (operation == CMD_INSERT &&
                rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
        {
@@ -2118,10 +2105,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.