summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/path
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2022-01-03 16:12:11 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2022-01-03 16:12:11 -0500
commit8a2e323f208557acbfdc911516e84ec017f5a6ca (patch)
tree4c10dcd4d9d3f8a0d3528bd8125a1a104f0c17d2 /src/backend/optimizer/path
parent9a3ddeb519e8d91b670fa923619b212a9670389c (diff)
downloadpostgresql-8a2e323f208557acbfdc911516e84ec017f5a6ca.tar.gz
Handle mixed returnable and non-returnable columns better in IOS.
We can revert the code changes of commit b5febc1d1 now, because commit 9a3ddeb51 installed a real solution for the difficulty that b5febc1d1 just dodged, namely that the planner might pick the wrong one of several index columns nominally containing the same value. It only matters which one we pick if we pick one that's not returnable, and that mistake is now foreclosed. Although both of the aforementioned commits were back-patched, I don't feel a need to take any risk by back-patching this one. The cases that it improves are very corner-ish. Discussion: https://postgr.es/m/3179992.1641150853@sss.pgh.pa.us
Diffstat (limited to 'src/backend/optimizer/path')
-rw-r--r--src/backend/optimizer/path/indxpath.c15
1 files changed, 1 insertions, 14 deletions
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 0e4e00eaf0..e2def356f6 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;
}