diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 7af001feaa..eea49cca7b 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -1350,14 +1350,17 @@ add_paths_to_append_rel(PlannerInfo *root, RelOptInfo *rel, /* * When the planner is considering cheap startup plans, we'll also - * collect all the cheapest_startup_paths and build an AppendPath - * containing those as subpaths. + * collect all the cheapest_startup_paths (if set) and build an + * AppendPath containing those as subpaths. */ - if (rel->consider_startup && childrel->pathlist != NIL && - childrel->cheapest_startup_path->param_info == NULL) + if (rel->consider_startup && childrel->cheapest_startup_path != NULL) + { + /* cheapest_startup_path must not be a parameterized path. */ + Assert(childrel->cheapest_startup_path->param_info == NULL); accumulate_append_subpath(childrel->cheapest_startup_path, &startup_subpaths, NULL); + } else startup_subpaths_valid = false; diff --git a/src/test/regress/expected/union.out b/src/test/regress/expected/union.out index f046e522de..64cebe4833 100644 --- a/src/test/regress/expected/union.out +++ b/src/test/regress/expected/union.out @@ -1453,3 +1453,19 @@ inner join tenk2 t2 on t1.tenthous = t2.tenthous -> Result (8 rows) +-- Ensure there is no problem if cheapest_startup_path is NULL +explain (costs off) +select * from tenk1 t1 +left join lateral + (select t1.tenthous from tenk2 t2 union all (values(1))) +on true limit 1; + QUERY PLAN +------------------------------------------------------------------- + Limit + -> Nested Loop Left Join + -> Seq Scan on tenk1 t1 + -> Append + -> Index Only Scan using tenk2_hundred on tenk2 t2 + -> Result +(6 rows) + diff --git a/src/test/regress/sql/union.sql b/src/test/regress/sql/union.sql index d65ca9f86d..599013e7c9 100644 --- a/src/test/regress/sql/union.sql +++ b/src/test/regress/sql/union.sql @@ -550,4 +550,11 @@ explain (costs off) select t1.unique1 from tenk1 t1 inner join tenk2 t2 on t1.tenthous = t2.tenthous union all -(values(1)) limit 1; \ No newline at end of file +(values(1)) limit 1; + +-- Ensure there is no problem if cheapest_startup_path is NULL +explain (costs off) +select * from tenk1 t1 +left join lateral + (select t1.tenthous from tenk2 t2 union all (values(1))) +on true limit 1;