mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
Don't generate parallel paths for rels with parallel-restricted outputs.
Such paths are unsafe. To make it cheaper to detect when this case applies, track whether a relation's default PathTarget contains any non-Vars. In most cases, the answer will be no, which enables us to determine cheaply that the target list for a proposed path is parallel-safe. However, subquery pull-up can create cases that require us to inspect the target list more carefully. Amit Kapila, reviewed by me.
This commit is contained in:
@@ -393,6 +393,7 @@ add_placeholders_to_base_rels(PlannerInfo *root)
|
||||
|
||||
rel->reltarget->exprs = lappend(rel->reltarget->exprs,
|
||||
copyObject(phinfo->ph_var));
|
||||
rel->reltarget_has_non_vars = true;
|
||||
/* reltarget's cost and width fields will be updated later */
|
||||
}
|
||||
}
|
||||
@@ -427,6 +428,7 @@ add_placeholders_to_joinrel(PlannerInfo *root, RelOptInfo *joinrel,
|
||||
/* Yup, add it to the output */
|
||||
joinrel->reltarget->exprs = lappend(joinrel->reltarget->exprs,
|
||||
phinfo->ph_var);
|
||||
joinrel->reltarget_has_non_vars = true;
|
||||
joinrel->reltarget->width += phinfo->ph_width;
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user