aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/path/allpaths.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/path/allpaths.c')
-rw-r--r--src/backend/optimizer/path/allpaths.c14
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);
}
/*