aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-04-20 21:48:12 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-04-20 21:48:12 +0000
commiteecc92564d06501feae7108d032d76c871e982fb (patch)
tree572696ef1a50f12d7fe7b5f69ca60b7d00fd0de3 /src
parent25bd3019e0e47bf36bb4ac203cf09f315b5dfac2 (diff)
downloadpostgresql-eecc92564d06501feae7108d032d76c871e982fb.tar.gz
postgresql-eecc92564d06501feae7108d032d76c871e982fb.zip
Don't try to run clauseless index scans on index types that don't support
it. Per report from Marinos Yannikos.
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/path/indxpath.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c
index 3cc210b4612..5680cbbc6e3 100644
--- a/src/backend/optimizer/path/indxpath.c
+++ b/src/backend/optimizer/path/indxpath.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/optimizer/path/indxpath.c,v 1.167.4.1 2005/03/01 00:25:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/optimizer/path/indxpath.c,v 1.167.4.2 2005/04/20 21:48:12 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -145,11 +145,16 @@ create_index_paths(Query *root, RelOptInfo *rel)
* 2. Compute pathkeys describing index's ordering, if any, then
* see how many of them are actually useful for this query.
*/
- index_pathkeys = build_index_pathkeys(root, rel, index,
- ForwardScanDirection);
- index_is_ordered = (index_pathkeys != NIL);
- useful_pathkeys = truncate_useless_pathkeys(root, rel,
- index_pathkeys);
+ index_is_ordered = OidIsValid(index->ordering[0]);
+ if (index_is_ordered)
+ {
+ index_pathkeys = build_index_pathkeys(root, rel, index,
+ ForwardScanDirection);
+ useful_pathkeys = truncate_useless_pathkeys(root, rel,
+ index_pathkeys);
+ }
+ else
+ useful_pathkeys = NIL;
/*
* 3. Generate an indexscan path if there are relevant restriction
@@ -159,10 +164,15 @@ create_index_paths(Query *root, RelOptInfo *rel)
* If there is a predicate, consider it anyway since the index
* predicate has already been found to match the query. The
* selectivity of the predicate might alone make the index useful.
+ *
+ * Note: not all index AMs support scans with no restriction clauses.
+ * We assume here that the AM does so if and only if it supports
+ * ordered scans. (It would probably be better if there were a
+ * specific flag for this in pg_am, but there's not.)
*/
if (restrictclauses != NIL ||
useful_pathkeys != NIL ||
- index->indpred != NIL)
+ (index->indpred != NIL && index_is_ordered))
add_path(rel, (Path *)
create_index_path(root, rel, index,
restrictclauses,