]> granicus.if.org Git - postgresql/commitdiff
Modify create_index regression test to avoid intermittent failures.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 26 Apr 2012 02:57:48 +0000 (22:57 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 26 Apr 2012 02:57:48 +0000 (22:57 -0400)
We have been seeing intermittent buildfarm failures due to a query
sometimes not using an index-only scan plan, because a background
auto-ANALYZE prevented the table's all-visible bits from being set
immediately, thereby causing the estimated cost of an index-only scan
to go up considerably.  Adjust the test case so that a bitmap index scan is
preferred instead, which serves equally well for the purpose the test case
is actually meant for.  (Of course, it would be better to eliminate the
interference from auto-ANALYZE, but I see no low-risk way to do that,
so any such fix will have to be left for 9.3 or later.)

src/test/regress/expected/create_index.out
src/test/regress/sql/create_index.sql

index 36609c5bbf9894009934dfeb344171444a973ee3..4411d250a71d168f83bffd3059ac6180eece4ecf 100644 (file)
@@ -2605,21 +2605,23 @@ DROP TABLE onek_with_null;
 CREATE TABLE dupindexcols AS
   SELECT unique1 as id, stringu2::text as f1 FROM tenk1;
 CREATE INDEX dupindexcols_i ON dupindexcols (f1, id, f1 text_pattern_ops);
-VACUUM ANALYZE dupindexcols;
+ANALYZE dupindexcols;
 EXPLAIN (COSTS OFF)
   SELECT count(*) FROM dupindexcols
-    WHERE f1 > 'MA' and id < 1000 and f1 ~<~ 'YX';
-                                   QUERY PLAN                                    
----------------------------------------------------------------------------------
- Aggregate
-   ->  Index Only Scan using dupindexcols_i on dupindexcols
-         Index Cond: ((f1 > 'MA'::text) AND (id < 1000) AND (f1 ~<~ 'YX'::text))
-(3 rows)
+    WHERE f1 > 'WA' and id < 1000 and f1 ~<~ 'YX';
+                                      QUERY PLAN                                       
+---------------------------------------------------------------------------------------
+ Aggregate
+   ->  Bitmap Heap Scan on dupindexcols
+         Recheck Cond: ((f1 > 'WA'::text) AND (id < 1000) AND (f1 ~<~ 'YX'::text))
+         ->  Bitmap Index Scan on dupindexcols_i
+               Index Cond: ((f1 > 'WA'::text) AND (id < 1000) AND (f1 ~<~ 'YX'::text))
+(5 rows)
 
 SELECT count(*) FROM dupindexcols
-  WHERE f1 > 'MA' and id < 1000 and f1 ~<~ 'YX';
+  WHERE f1 > 'WA' and id < 1000 and f1 ~<~ 'YX';
  count 
 -------
-   497
+    97
 (1 row)
 
index deb198972655f2259af0db5d8215dc972830aa0d..62d05d06058e6e4b03e21f3cc15876da1efac62d 100644 (file)
@@ -865,10 +865,10 @@ DROP TABLE onek_with_null;
 CREATE TABLE dupindexcols AS
   SELECT unique1 as id, stringu2::text as f1 FROM tenk1;
 CREATE INDEX dupindexcols_i ON dupindexcols (f1, id, f1 text_pattern_ops);
-VACUUM ANALYZE dupindexcols;
+ANALYZE dupindexcols;
 
 EXPLAIN (COSTS OFF)
   SELECT count(*) FROM dupindexcols
-    WHERE f1 > 'MA' and id < 1000 and f1 ~<~ 'YX';
+    WHERE f1 > 'WA' and id < 1000 and f1 ~<~ 'YX';
 SELECT count(*) FROM dupindexcols
-  WHERE f1 > 'MA' and id < 1000 and f1 ~<~ 'YX';
+  WHERE f1 > 'WA' and id < 1000 and f1 ~<~ 'YX';