diff options
-rw-r--r-- | contrib/file_fdw/file_fdw.c | 1 | ||||
-rw-r--r-- | contrib/postgres_fdw/postgres_fdw.c | 4 | ||||
-rw-r--r-- | src/backend/optimizer/util/pathnode.c | 7 | ||||
-rw-r--r-- | src/include/optimizer/pathnode.h | 1 |
4 files changed, 11 insertions, 2 deletions
diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c index 0ac4658e84..bc4d2d7082 100644 --- a/contrib/file_fdw/file_fdw.c +++ b/contrib/file_fdw/file_fdw.c @@ -524,6 +524,7 @@ fileGetForeignPaths(PlannerInfo *root, */ add_path(baserel, (Path *) create_foreignscan_path(root, baserel, + NULL, /* default pathtarget */ baserel->rows, startup_cost, total_cost, diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index d4ee2a8548..96875b4184 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -793,6 +793,7 @@ postgresGetForeignPaths(PlannerInfo *root, * to estimate cost and size of this path. */ path = create_foreignscan_path(root, baserel, + NULL, /* default pathtarget */ fpinfo->rows, fpinfo->startup_cost, fpinfo->total_cost, @@ -964,6 +965,7 @@ postgresGetForeignPaths(PlannerInfo *root, /* Make the path */ path = create_foreignscan_path(root, baserel, + NULL, /* default pathtarget */ rows, startup_cost, total_cost, @@ -3565,6 +3567,7 @@ add_paths_with_pathkeys_for_rel(PlannerInfo *root, RelOptInfo *rel, add_path(rel, (Path *) create_foreignscan_path(root, rel, + NULL, rows, startup_cost, total_cost, @@ -3702,6 +3705,7 @@ postgresGetForeignJoinPaths(PlannerInfo *root, */ joinpath = create_foreignscan_path(root, joinrel, + NULL, /* default pathtarget */ rows, startup_cost, total_cost, diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 8f089c5988..675e47cdd0 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -1819,10 +1819,13 @@ create_worktablescan_path(PlannerInfo *root, RelOptInfo *rel, * This function is never called from core Postgres; rather, it's expected * to be called by the GetForeignPaths or GetForeignJoinPaths function of * a foreign data wrapper. We make the FDW supply all fields of the path, - * since we do not have any way to calculate them in core. + * since we do not have any way to calculate them in core. However, there + * is a sane default for the pathtarget (rel->reltarget), so we let a NULL + * for "target" select that. */ ForeignPath * create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel, + PathTarget *target, double rows, Cost startup_cost, Cost total_cost, List *pathkeys, Relids required_outer, @@ -1833,7 +1836,7 @@ create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel, pathnode->path.pathtype = T_ForeignScan; pathnode->path.parent = rel; - pathnode->path.pathtarget = rel->reltarget; + pathnode->path.pathtarget = target ? target : rel->reltarget; pathnode->path.param_info = get_baserel_parampathinfo(root, rel, required_outer); pathnode->path.parallel_aware = false; diff --git a/src/include/optimizer/pathnode.h b/src/include/optimizer/pathnode.h index 3007adb8c2..d1eb22f27a 100644 --- a/src/include/optimizer/pathnode.h +++ b/src/include/optimizer/pathnode.h @@ -87,6 +87,7 @@ extern Path *create_ctescan_path(PlannerInfo *root, RelOptInfo *rel, extern Path *create_worktablescan_path(PlannerInfo *root, RelOptInfo *rel, Relids required_outer); extern ForeignPath *create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel, + PathTarget *target, double rows, Cost startup_cost, Cost total_cost, List *pathkeys, Relids required_outer, |