diff options
Diffstat (limited to 'src/backend/optimizer/path/allpaths.c')
-rw-r--r-- | src/backend/optimizer/path/allpaths.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 4895cee9944..aa78c0af0cd 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -772,6 +772,17 @@ set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte) */ required_outer = rel->lateral_relids; + /* + * Consider TID scans. + * + * If create_tidscan_paths returns true, then a TID scan path is forced. + * This happens when rel->baserestrictinfo contains CurrentOfExpr, because + * the executor can't handle any other type of path for such queries. + * Hence, we return without adding any other paths. + */ + if (create_tidscan_paths(root, rel)) + return; + /* Consider sequential scan */ add_path(rel, create_seqscan_path(root, rel, required_outer, 0)); @@ -781,9 +792,6 @@ set_plain_rel_pathlist(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte) /* Consider index scans */ create_index_paths(root, rel); - - /* Consider TID scans */ - create_tidscan_paths(root, rel); } /* |