Fix thinko in ExecCleanupTupleRouting().

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
This commit is contained in:
Etsuro Fujita 2019-04-15 19:01:09 +09:00
parent abb9c63b2c
commit 3a45321a49
1 changed files with 6 additions and 6 deletions

View 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);
}