aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/btree_gist/expected/inet.out8
-rw-r--r--contrib/btree_gist/sql/inet.sql2
-rw-r--r--src/backend/optimizer/path/indxpath.c15
3 files changed, 6 insertions, 19 deletions
diff --git a/contrib/btree_gist/expected/inet.out b/contrib/btree_gist/expected/inet.out
index c323d903da4..f15f1435f0a 100644
--- a/contrib/btree_gist/expected/inet.out
+++ b/contrib/btree_gist/expected/inet.out
@@ -83,13 +83,13 @@ SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
DROP INDEX inetidx;
CREATE INDEX ON inettmp USING gist (a gist_inet_ops, a inet_ops);
--- likewise here (checks for core planner bug)
+-- this can be an index-only scan, as long as the planner uses the right column
EXPLAIN (COSTS OFF)
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
- QUERY PLAN
-----------------------------------------------------
+ QUERY PLAN
+---------------------------------------------------------
Aggregate
- -> Index Scan using inettmp_a_a1_idx on inettmp
+ -> Index Only Scan using inettmp_a_a1_idx on inettmp
Index Cond: (a = '89.225.196.191'::inet)
(3 rows)
diff --git a/contrib/btree_gist/sql/inet.sql b/contrib/btree_gist/sql/inet.sql
index 4b8d354b00e..249e8085c3b 100644
--- a/contrib/btree_gist/sql/inet.sql
+++ b/contrib/btree_gist/sql/inet.sql
@@ -42,7 +42,7 @@ DROP INDEX inetidx;
CREATE INDEX ON inettmp USING gist (a gist_inet_ops, a inet_ops);
--- likewise here (checks for core planner bug)
+-- this can be an index-only scan, as long as the planner uses the right column
EXPLAIN (COSTS OFF)
SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 0e4e00eaf02..e2def356f63 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -1807,7 +1807,6 @@ check_index_only(RelOptInfo *rel, IndexOptInfo *index)
bool result;
Bitmapset *attrs_used = NULL;
Bitmapset *index_canreturn_attrs = NULL;
- Bitmapset *index_cannotreturn_attrs = NULL;
ListCell *lc;
int i;
@@ -1847,11 +1846,7 @@ check_index_only(RelOptInfo *rel, IndexOptInfo *index)
/*
* Construct a bitmapset of columns that the index can return back in an
- * index-only scan. If there are multiple index columns containing the
- * same attribute, all of them must be capable of returning the value,
- * since we might recheck operators on any of them. (Potentially we could
- * be smarter about that, but it's such a weird situation that it doesn't
- * seem worth spending a lot of sweat on.)
+ * index-only scan.
*/
for (i = 0; i < index->ncolumns; i++)
{
@@ -1868,21 +1863,13 @@ check_index_only(RelOptInfo *rel, IndexOptInfo *index)
index_canreturn_attrs =
bms_add_member(index_canreturn_attrs,
attno - FirstLowInvalidHeapAttributeNumber);
- else
- index_cannotreturn_attrs =
- bms_add_member(index_cannotreturn_attrs,
- attno - FirstLowInvalidHeapAttributeNumber);
}
- index_canreturn_attrs = bms_del_members(index_canreturn_attrs,
- index_cannotreturn_attrs);
-
/* Do we have all the necessary attributes? */
result = bms_is_subset(attrs_used, index_canreturn_attrs);
bms_free(attrs_used);
bms_free(index_canreturn_attrs);
- bms_free(index_cannotreturn_attrs);
return result;
}