summaryrefslogtreecommitdiff
path: root/src/backend/optimizer
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer')
-rw-r--r--src/backend/optimizer/path/indxpath.c9
-rw-r--r--src/backend/optimizer/plan/analyzejoins.c9
2 files changed, 10 insertions, 8 deletions
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index b8000da56d9..3800f0cdfb7 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -3557,10 +3557,13 @@ relation_has_unique_index_for(PlannerInfo *root, RelOptInfo *rel,
/*
* If the index is not unique, or not immediately enforced, or if it's
- * a partial index that doesn't match the query, it's useless here.
+ * a partial index, it's useless here. We're unable to make use of
+ * predOK partial unique indexes due to the fact that
+ * check_index_predicates() also makes use of join predicates to
+ * determine if the partial index is usable. Here we need proofs that
+ * hold true before any joins are evaluated.
*/
- if (!ind->unique || !ind->immediate ||
- (ind->indpred != NIL && !ind->predOK))
+ if (!ind->unique || !ind->immediate || ind->indpred != NIL)
continue;
/*
diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index 7ea6e26fecd..34efeee93f9 100644
--- a/src/backend/optimizer/plan/analyzejoins.c
+++ b/src/backend/optimizer/plan/analyzejoins.c
@@ -600,9 +600,9 @@ rel_supports_distinctness(PlannerInfo *root, RelOptInfo *rel)
/*
* For a plain relation, we only know how to prove uniqueness by
* reference to unique indexes. Make sure there's at least one
- * suitable unique index. It must be immediately enforced, and if
- * it's a partial index, it must match the query. (Keep these
- * conditions in sync with relation_has_unique_index_for!)
+ * suitable unique index. It must be immediately enforced, and not a
+ * partial index. (Keep these conditions in sync with
+ * relation_has_unique_index_for!)
*/
ListCell *lc;
@@ -610,8 +610,7 @@ rel_supports_distinctness(PlannerInfo *root, RelOptInfo *rel)
{
IndexOptInfo *ind = (IndexOptInfo *) lfirst(lc);
- if (ind->unique && ind->immediate &&
- (ind->indpred == NIL || ind->predOK))
+ if (ind->unique && ind->immediate && ind->indpred == NIL)
return true;
}
}