Fix thinko in ExecCleanupTupleRouting().
authorEtsuro Fujita <efujita@postgresql.org>
Mon, 15 Apr 2019 10:01:09 +0000 (19:01 +0900)
committerEtsuro Fujita <efujita@postgresql.org>
Mon, 15 Apr 2019 10:01:09 +0000 (19:01 +0900)
Commit 3f2393edef changed ExecCleanupTupleRouting() so that it skipped
cleaning up subplan resultrels before calling EndForeignInsert(), but
that would cause an issue: when those resultrels were foreign tables,
the FDWs would fail to shut down.  Repair by skipping it after calling
EndForeignInsert() as before.

Author: Etsuro Fujita
Reviewed-by: David Rowley and Amit Langote
Discussion: https://postgr.es/m/5CAF3B8F.2090905@lab.ntt.co.jp

src/backend/executor/execPartition.c

index 50800aa5ca53ef8bb1516d338c93404ae5bca59a..70709e5deab671f5fa69995c99e66594da930a42 100644 (file)
@@ -1126,6 +1126,12 @@ ExecCleanupTupleRouting(ModifyTableState *mtstate,
    {
        ResultRelInfo *resultRelInfo = proute->partitions[i];
 
+       /* Allow any FDWs to shut down */
+       if (resultRelInfo->ri_FdwRoutine != NULL &&
+           resultRelInfo->ri_FdwRoutine->EndForeignInsert != NULL)
+           resultRelInfo->ri_FdwRoutine->EndForeignInsert(mtstate->ps.state,
+                                                          resultRelInfo);
+
        /*
         * Check if this result rel is one belonging to the node's subplans,
         * if so, let ExecEndPlan() clean it up.
@@ -1142,12 +1148,6 @@ ExecCleanupTupleRouting(ModifyTableState *mtstate,
                continue;
        }
 
-       /* Allow any FDWs to shut down if they've been exercised */
-       if (resultRelInfo->ri_FdwRoutine != NULL &&
-           resultRelInfo->ri_FdwRoutine->EndForeignInsert != NULL)
-           resultRelInfo->ri_FdwRoutine->EndForeignInsert(mtstate->ps.state,
-                                                          resultRelInfo);
-
        ExecCloseIndices(resultRelInfo);
        table_close(resultRelInfo->ri_RelationDesc, NoLock);
    }