diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-05-19 15:23:42 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-05-19 15:26:05 -0400 |
commit | b522759508dae17535f8cd20598a50a409a97f4d (patch) | |
tree | fa0c7964d143e8a1d43d774dbc4d82a1b236107c /src/backend/optimizer/util/pathnode.c | |
parent | cf5389f5b57af714d002d532add291f87ddb0062 (diff) | |
download | postgresql-b522759508dae17535f8cd20598a50a409a97f4d.tar.gz postgresql-b522759508dae17535f8cd20598a50a409a97f4d.zip |
Copy partitioned_rels lists to avoid shared substructure.
Otherwise, set_plan_refs() can get applied to the same list
multiple times through different references, leading to chaos.
Amit Langote, Dilip Kumar, and Robert Haas, reviewed by Ashutosh
Bapat. Original report by Sveinn Sveinsson.
Discussion: http://postgr.es/m/20170517141151.1435.79890@wrigleys.postgresql.org
Diffstat (limited to 'src/backend/optimizer/util/pathnode.c')
-rw-r--r-- | src/backend/optimizer/util/pathnode.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 46778aaefd3..ec4a093d9fb 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -1216,7 +1216,7 @@ create_append_path(RelOptInfo *rel, List *subpaths, Relids required_outer, pathnode->path.parallel_workers = parallel_workers; pathnode->path.pathkeys = NIL; /* result is always considered * unsorted */ - pathnode->partitioned_rels = partitioned_rels; + pathnode->partitioned_rels = list_copy(partitioned_rels); pathnode->subpaths = subpaths; /* @@ -1276,7 +1276,7 @@ create_merge_append_path(PlannerInfo *root, pathnode->path.parallel_safe = rel->consider_parallel; pathnode->path.parallel_workers = 0; pathnode->path.pathkeys = pathkeys; - pathnode->partitioned_rels = partitioned_rels; + pathnode->partitioned_rels = list_copy(partitioned_rels); pathnode->subpaths = subpaths; /* @@ -3238,7 +3238,7 @@ create_modifytable_path(PlannerInfo *root, RelOptInfo *rel, pathnode->operation = operation; pathnode->canSetTag = canSetTag; pathnode->nominalRelation = nominalRelation; - pathnode->partitioned_rels = partitioned_rels; + pathnode->partitioned_rels = list_copy(partitioned_rels); pathnode->resultRelations = resultRelations; pathnode->subpaths = subpaths; pathnode->subroots = subroots; |