v17-0001-delta.patch
application/octet-stream
Filename: v17-0001-delta.patch
Type: application/octet-stream
Part: 0
Patch
Format: unified
Series: patch v17-0001
| File | + | − |
|---|---|---|
| contrib/postgres_fdw/postgres_fdw.c | 1 | 1 |
| src/backend/executor/nodeForeignscan.c | 11 | 7 |
diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c
index 78facb8..e2b4b56 100644
--- a/contrib/postgres_fdw/postgres_fdw.c
+++ b/contrib/postgres_fdw/postgres_fdw.c
@@ -2357,7 +2357,7 @@ postgresBeginDirectModify(ForeignScanState *node, int eflags)
* Identify which user to do the remote access as. This should match what
* ExecCheckRTEPerms() does.
*/
- rtindex = node->resultRelInfo->ri_RangeTableIndex;
+ rtindex = fsplan->resultRelation;
rte = exec_rt_fetch(rtindex, estate);
userid = rte->checkAsUser ? rte->checkAsUser : GetUserId();
diff --git a/src/backend/executor/nodeForeignscan.c b/src/backend/executor/nodeForeignscan.c
index 0b20f94..ce1ff17 100644
--- a/src/backend/executor/nodeForeignscan.c
+++ b/src/backend/executor/nodeForeignscan.c
@@ -49,7 +49,18 @@ ForeignNext(ForeignScanState *node)
/* Call the Iterate function in short-lived context */
oldcontext = MemoryContextSwitchTo(econtext->ecxt_per_tuple_memory);
if (plan->operation != CMD_SELECT)
+ {
+ EState *estate = node->ss.ps.state;
+
+ /*
+ * For the FDW's convenience, look up the modification target
+ * relation's ResultRelInfo.
+ */
+ Assert(plan->resultRelation > 0);
+ if (node->resultRelInfo == NULL)
+ node->resultRelInfo = estate->es_result_relations[plan->resultRelation - 1];
slot = node->fdwroutine->IterateDirectModify(node);
+ }
else
slot = node->fdwroutine->IterateForeignScan(node);
MemoryContextSwitchTo(oldcontext);
@@ -215,13 +226,6 @@ ExecInitForeignScan(ForeignScan *node, EState *estate, int eflags)
scanstate->fdwroutine = fdwroutine;
scanstate->fdw_state = NULL;
- /*
- * For the FDW's convenience, look up the modification target relation's.
- * ResultRelInfo.
- */
- if (node->resultRelation > 0)
- scanstate->resultRelInfo = estate->es_result_relations[node->resultRelation - 1];
-
/* Initialize any outer plan. */
if (outerPlan(node))
outerPlanState(scanstate) =