3 -- Create ancillary data structures (i.e. indices)
8 CREATE INDEX onek_unique1 ON onek USING btree(unique1 int4_ops);
9 CREATE INDEX onek_unique2 ON onek USING btree(unique2 int4_ops);
10 CREATE INDEX onek_hundred ON onek USING btree(hundred int4_ops);
11 CREATE INDEX onek_stringu1 ON onek USING btree(stringu1 name_ops);
12 CREATE INDEX tenk1_unique1 ON tenk1 USING btree(unique1 int4_ops);
13 CREATE INDEX tenk1_unique2 ON tenk1 USING btree(unique2 int4_ops);
14 CREATE INDEX tenk1_hundred ON tenk1 USING btree(hundred int4_ops);
15 CREATE INDEX tenk1_thous_tenthous ON tenk1 (thousand, tenthous);
16 CREATE INDEX tenk2_unique1 ON tenk2 USING btree(unique1 int4_ops);
17 CREATE INDEX tenk2_unique2 ON tenk2 USING btree(unique2 int4_ops);
18 CREATE INDEX tenk2_hundred ON tenk2 USING btree(hundred int4_ops);
19 CREATE INDEX rix ON road USING btree (name text_ops);
20 CREATE INDEX iix ON ihighway USING btree (name text_ops);
21 CREATE INDEX six ON shighway USING btree (name text_ops);
23 COMMENT ON INDEX six_wrong IS 'bad index';
24 ERROR: relation "six_wrong" does not exist
25 COMMENT ON INDEX six IS 'good index';
26 COMMENT ON INDEX six IS NULL;
28 -- BTREE ascending/descending cases
30 -- we load int4/text from pure descending data (each key is a new
31 -- low key) and name/f8 from pure ascending data (each key is a new
32 -- high key). we had a bug where new low keys would sometimes be
35 CREATE INDEX bt_i4_index ON bt_i4_heap USING btree (seqno int4_ops);
36 CREATE INDEX bt_name_index ON bt_name_heap USING btree (seqno name_ops);
37 CREATE INDEX bt_txt_index ON bt_txt_heap USING btree (seqno text_ops);
38 CREATE INDEX bt_f8_index ON bt_f8_heap USING btree (seqno float8_ops);
40 -- BTREE partial indices
42 CREATE INDEX onek2_u1_prtl ON onek2 USING btree(unique1 int4_ops)
43 where unique1 < 20 or unique1 > 980;
44 CREATE INDEX onek2_u2_prtl ON onek2 USING btree(unique2 int4_ops)
46 CREATE INDEX onek2_stu1_prtl ON onek2 USING btree(stringu1 name_ops)
47 where onek2.stringu1 >= 'J' and onek2.stringu1 < 'K';
49 -- GiST (rtree-equivalent opclasses only)
51 CREATE INDEX grect2ind ON fast_emp4000 USING gist (home_base);
52 CREATE INDEX gpolygonind ON polygon_tbl USING gist (f1);
53 CREATE INDEX gcircleind ON circle_tbl USING gist (f1);
54 CREATE INDEX gpointind ON point_tbl USING gist (f1);
55 CREATE TEMP TABLE gpolygon_tbl AS
56 SELECT polygon(home_base) AS f1 FROM slow_emp4000;
57 INSERT INTO gpolygon_tbl VALUES ( '(1000,0,0,1000)' );
58 INSERT INTO gpolygon_tbl VALUES ( '(0,1000,1000,1000)' );
59 CREATE TEMP TABLE gcircle_tbl AS
60 SELECT circle(home_base) AS f1 FROM slow_emp4000;
61 CREATE INDEX ggpolygonind ON gpolygon_tbl USING gist (f1);
62 CREATE INDEX ggcircleind ON gcircle_tbl USING gist (f1);
63 SET enable_seqscan = ON;
64 SET enable_indexscan = OFF;
65 SET enable_bitmapscan = OFF;
66 SELECT * FROM fast_emp4000
67 WHERE home_base @ '(200,200),(2000,1000)'::box
68 ORDER BY (home_base[0])[0];
70 -----------------------
75 SELECT count(*) FROM fast_emp4000 WHERE home_base && '(1000,1000,0,0)'::box;
81 SELECT count(*) FROM fast_emp4000 WHERE home_base IS NULL;
87 SELECT * FROM polygon_tbl WHERE f1 ~ '((1,1),(2,2),(2,1))'::polygon
88 ORDER BY (poly_center(f1))[0];
94 SELECT * FROM circle_tbl WHERE f1 && circle(point(1,-2), 1)
104 SELECT count(*) FROM gpolygon_tbl WHERE f1 && '(1000,1000,0,0)'::polygon;
110 SELECT count(*) FROM gcircle_tbl WHERE f1 && '<(500,500),500>'::circle;
116 SELECT count(*) FROM point_tbl WHERE f1 <@ box '(0,0,100,100)';
122 SELECT count(*) FROM point_tbl WHERE box '(0,0,100,100)' @> f1;
128 SELECT count(*) FROM point_tbl WHERE f1 <@ polygon '(0,0),(0,100),(100,100),(50,50),(100,0),(0,0)';
134 SELECT count(*) FROM point_tbl WHERE f1 <@ circle '<(50,50),50>';
140 SELECT count(*) FROM point_tbl p WHERE p.f1 << '(0.0, 0.0)';
146 SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
152 SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
158 SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
164 SELECT count(*) FROM point_tbl p WHERE p.f1 ~= '(-5, -12)';
170 SET enable_seqscan = OFF;
171 SET enable_indexscan = ON;
172 SET enable_bitmapscan = ON;
174 SELECT * FROM fast_emp4000
175 WHERE home_base @ '(200,200),(2000,1000)'::box
176 ORDER BY (home_base[0])[0];
178 ----------------------------------------------------------------------
180 Sort Key: ((home_base[0])[0])
181 -> Bitmap Heap Scan on fast_emp4000
182 Recheck Cond: (home_base @ '(2000,1000),(200,200)'::box)
183 -> Bitmap Index Scan on grect2ind
184 Index Cond: (home_base @ '(2000,1000),(200,200)'::box)
187 SELECT * FROM fast_emp4000
188 WHERE home_base @ '(200,200),(2000,1000)'::box
189 ORDER BY (home_base[0])[0];
191 -----------------------
193 (1444,403),(1346,344)
197 SELECT count(*) FROM fast_emp4000 WHERE home_base && '(1000,1000,0,0)'::box;
199 -------------------------------------------------------------------
201 -> Bitmap Heap Scan on fast_emp4000
202 Recheck Cond: (home_base && '(1000,1000),(0,0)'::box)
203 -> Bitmap Index Scan on grect2ind
204 Index Cond: (home_base && '(1000,1000),(0,0)'::box)
207 SELECT count(*) FROM fast_emp4000 WHERE home_base && '(1000,1000,0,0)'::box;
214 SELECT count(*) FROM fast_emp4000 WHERE home_base IS NULL;
216 -----------------------------------------------
218 -> Bitmap Heap Scan on fast_emp4000
219 Recheck Cond: (home_base IS NULL)
220 -> Bitmap Index Scan on grect2ind
221 Index Cond: (home_base IS NULL)
224 SELECT count(*) FROM fast_emp4000 WHERE home_base IS NULL;
231 SELECT * FROM polygon_tbl WHERE f1 ~ '((1,1),(2,2),(2,1))'::polygon
232 ORDER BY (poly_center(f1))[0];
234 -----------------------------------------------------------
236 Sort Key: ((poly_center(f1))[0])
237 -> Index Scan using gpolygonind on polygon_tbl
238 Index Cond: (f1 ~ '((1,1),(2,2),(2,1))'::polygon)
241 SELECT * FROM polygon_tbl WHERE f1 ~ '((1,1),(2,2),(2,1))'::polygon
242 ORDER BY (poly_center(f1))[0];
244 ---------------------
249 SELECT * FROM circle_tbl WHERE f1 && circle(point(1,-2), 1)
252 --------------------------------------------------
255 -> Index Scan using gcircleind on circle_tbl
256 Index Cond: (f1 && '<(1,-2),1>'::circle)
259 SELECT * FROM circle_tbl WHERE f1 && circle(point(1,-2), 1)
270 SELECT count(*) FROM gpolygon_tbl WHERE f1 && '(1000,1000,0,0)'::polygon;
272 ------------------------------------------------------------------
274 -> Bitmap Heap Scan on gpolygon_tbl
275 Recheck Cond: (f1 && '((1000,1000),(0,0))'::polygon)
276 -> Bitmap Index Scan on ggpolygonind
277 Index Cond: (f1 && '((1000,1000),(0,0))'::polygon)
280 SELECT count(*) FROM gpolygon_tbl WHERE f1 && '(1000,1000,0,0)'::polygon;
287 SELECT count(*) FROM gcircle_tbl WHERE f1 && '<(500,500),500>'::circle;
289 -------------------------------------------------------------
291 -> Bitmap Heap Scan on gcircle_tbl
292 Recheck Cond: (f1 && '<(500,500),500>'::circle)
293 -> Bitmap Index Scan on ggcircleind
294 Index Cond: (f1 && '<(500,500),500>'::circle)
297 SELECT count(*) FROM gcircle_tbl WHERE f1 && '<(500,500),500>'::circle;
304 SELECT count(*) FROM point_tbl WHERE f1 <@ box '(0,0,100,100)';
306 ----------------------------------------------------
308 -> Index Scan using gpointind on point_tbl
309 Index Cond: (f1 <@ '(100,100),(0,0)'::box)
312 SELECT count(*) FROM point_tbl WHERE f1 <@ box '(0,0,100,100)';
319 SELECT count(*) FROM point_tbl WHERE box '(0,0,100,100)' @> f1;
321 ----------------------------------------------------
323 -> Index Scan using gpointind on point_tbl
324 Index Cond: ('(100,100),(0,0)'::box @> f1)
327 SELECT count(*) FROM point_tbl WHERE box '(0,0,100,100)' @> f1;
334 SELECT count(*) FROM point_tbl WHERE f1 <@ polygon '(0,0),(0,100),(100,100),(50,50),(100,0),(0,0)';
336 ----------------------------------------------------------------------------------------
338 -> Index Scan using gpointind on point_tbl
339 Index Cond: (f1 <@ '((0,0),(0,100),(100,100),(50,50),(100,0),(0,0))'::polygon)
342 SELECT count(*) FROM point_tbl WHERE f1 <@ polygon '(0,0),(0,100),(100,100),(50,50),(100,0),(0,0)';
349 SELECT count(*) FROM point_tbl WHERE f1 <@ circle '<(50,50),50>';
351 ----------------------------------------------------
353 -> Index Scan using gpointind on point_tbl
354 Index Cond: (f1 <@ '<(50,50),50>'::circle)
357 SELECT count(*) FROM point_tbl WHERE f1 <@ circle '<(50,50),50>';
364 SELECT count(*) FROM point_tbl p WHERE p.f1 << '(0.0, 0.0)';
366 -------------------------------------------------
368 -> Index Scan using gpointind on point_tbl p
369 Index Cond: (f1 << '(0,0)'::point)
372 SELECT count(*) FROM point_tbl p WHERE p.f1 << '(0.0, 0.0)';
379 SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
381 -------------------------------------------------
383 -> Index Scan using gpointind on point_tbl p
384 Index Cond: (f1 >> '(0,0)'::point)
387 SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
394 SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
396 -------------------------------------------------
398 -> Index Scan using gpointind on point_tbl p
399 Index Cond: (f1 <^ '(0,0)'::point)
402 SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
409 SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
411 -------------------------------------------------
413 -> Index Scan using gpointind on point_tbl p
414 Index Cond: (f1 >^ '(0,0)'::point)
417 SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
424 SELECT count(*) FROM point_tbl p WHERE p.f1 ~= '(-5, -12)';
426 -------------------------------------------------
428 -> Index Scan using gpointind on point_tbl p
429 Index Cond: (f1 ~= '(-5,-12)'::point)
432 SELECT count(*) FROM point_tbl p WHERE p.f1 ~= '(-5, -12)';
438 RESET enable_seqscan;
439 RESET enable_indexscan;
440 RESET enable_bitmapscan;
442 -- GIN over int[] and text[]
444 SET enable_seqscan = OFF;
445 SET enable_indexscan = ON;
446 SET enable_bitmapscan = OFF;
447 CREATE INDEX intarrayidx ON array_index_op_test USING gin (i);
448 SELECT * FROM array_index_op_test WHERE i @> '{32}' ORDER BY seqno;
450 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
451 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
452 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
453 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
454 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
455 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
456 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
459 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
461 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
462 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
463 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
464 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
465 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
466 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
467 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
470 SELECT * FROM array_index_op_test WHERE i @> '{17}' ORDER BY seqno;
472 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
473 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
474 12 | {17,99,18,52,91,72,0,43,96,23} | {AAAAA33250,AAAAAAAAAAAAAAAAAAA85420,AAAAAAAAAAA33576}
475 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
476 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
477 53 | {38,17} | {AAAAAAAAAAA21658}
478 65 | {61,5,76,59,17} | {AAAAAA99807,AAAAA64741,AAAAAAAAAAA53908,AA21643,AAAAAAAAA10012}
479 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
480 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
483 SELECT * FROM array_index_op_test WHERE i && '{17}' ORDER BY seqno;
485 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
486 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
487 12 | {17,99,18,52,91,72,0,43,96,23} | {AAAAA33250,AAAAAAAAAAAAAAAAAAA85420,AAAAAAAAAAA33576}
488 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
489 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
490 53 | {38,17} | {AAAAAAAAAAA21658}
491 65 | {61,5,76,59,17} | {AAAAAA99807,AAAAA64741,AAAAAAAAAAA53908,AA21643,AAAAAAAAA10012}
492 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
493 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
496 SELECT * FROM array_index_op_test WHERE i @> '{32,17}' ORDER BY seqno;
498 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
499 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
500 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
501 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
504 SELECT * FROM array_index_op_test WHERE i && '{32,17}' ORDER BY seqno;
506 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
507 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
508 12 | {17,99,18,52,91,72,0,43,96,23} | {AAAAA33250,AAAAAAAAAAAAAAAAAAA85420,AAAAAAAAAAA33576}
509 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
510 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
511 53 | {38,17} | {AAAAAAAAAAA21658}
512 65 | {61,5,76,59,17} | {AAAAAA99807,AAAAA64741,AAAAAAAAAAA53908,AA21643,AAAAAAAAA10012}
513 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
514 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
515 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
516 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
517 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
520 SELECT * FROM array_index_op_test WHERE i <@ '{38,34,32,89}' ORDER BY seqno;
522 -------+---------------+----------------------------------------------------------------------------------------------------------------------------
523 40 | {34} | {AAAAAAAAAAAAAA10611,AAAAAAAAAAAAAAAAAAA1205,AAAAAAAAAAA50956,AAAAAAAAAAAAAAAA31334,AAAAA70466,AAAAAAAA81587,AAAAAAA74623}
524 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
525 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
528 SELECT * FROM array_index_op_test WHERE i = '{47,77}' ORDER BY seqno;
530 -------+---------+-----------------------------------------------------------------------------------------------------------------
531 95 | {47,77} | {AAAAAAAAAAAAAAAAA764,AAAAAAAAAAA74076,AAAAAAAAAA18107,AAAAA40681,AAAAAAAAAAAAAAA35875,AAAAA60038,AAAAAAA56483}
534 CREATE INDEX textarrayidx ON array_index_op_test USING gin (t);
535 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAAA72908}' ORDER BY seqno;
537 -------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------
538 22 | {11,6,56,62,53,30} | {AAAAAAAA72908}
539 45 | {99,45} | {AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}
540 72 | {22,1,16,78,20,91,83} | {47735,AAAAAAA56483,AAAAAAAAAAAAA93788,AA42406,AAAAAAAAAAAAA73084,AAAAAAAA72908,AAAAAAAAAAAAAAAAAA61286,AAAAA66674,AAAAAAAAAAAAAAAAA50407}
541 79 | {45} | {AAAAAAAAAA646,AAAAAAAAAAAAAAAAAAA70415,AAAAAA43678,AAAAAAAA72908}
544 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAA72908}' ORDER BY seqno;
546 -------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------
547 22 | {11,6,56,62,53,30} | {AAAAAAAA72908}
548 45 | {99,45} | {AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}
549 72 | {22,1,16,78,20,91,83} | {47735,AAAAAAA56483,AAAAAAAAAAAAA93788,AA42406,AAAAAAAAAAAAA73084,AAAAAAAA72908,AAAAAAAAAAAAAAAAAA61286,AAAAA66674,AAAAAAAAAAAAAAAAA50407}
550 79 | {45} | {AAAAAAAAAA646,AAAAAAAAAAAAAAAAAAA70415,AAAAAA43678,AAAAAAAA72908}
553 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAAAAA646}' ORDER BY seqno;
555 -------+------------------+--------------------------------------------------------------------
556 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
557 79 | {45} | {AAAAAAAAAA646,AAAAAAAAAAAAAAAAAAA70415,AAAAAA43678,AAAAAAAA72908}
558 96 | {23,97,43} | {AAAAAAAAAA646,A87088}
561 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAAAA646}' ORDER BY seqno;
563 -------+------------------+--------------------------------------------------------------------
564 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
565 79 | {45} | {AAAAAAAAAA646,AAAAAAAAAAAAAAAAAAA70415,AAAAAA43678,AAAAAAAA72908}
566 96 | {23,97,43} | {AAAAAAAAAA646,A87088}
569 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAAA72908,AAAAAAAAAA646}' ORDER BY seqno;
571 -------+------+--------------------------------------------------------------------
572 79 | {45} | {AAAAAAAAAA646,AAAAAAAAAAAAAAAAAAA70415,AAAAAA43678,AAAAAAAA72908}
575 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAA72908,AAAAAAAAAA646}' ORDER BY seqno;
577 -------+-----------------------+--------------------------------------------------------------------------------------------------------------------------------------------
578 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
579 22 | {11,6,56,62,53,30} | {AAAAAAAA72908}
580 45 | {99,45} | {AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}
581 72 | {22,1,16,78,20,91,83} | {47735,AAAAAAA56483,AAAAAAAAAAAAA93788,AA42406,AAAAAAAAAAAAA73084,AAAAAAAA72908,AAAAAAAAAAAAAAAAAA61286,AAAAA66674,AAAAAAAAAAAAAAAAA50407}
582 79 | {45} | {AAAAAAAAAA646,AAAAAAAAAAAAAAAAAAA70415,AAAAAA43678,AAAAAAAA72908}
583 96 | {23,97,43} | {AAAAAAAAAA646,A87088}
586 SELECT * FROM array_index_op_test WHERE t <@ '{AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}' ORDER BY seqno;
588 -------+--------------------+-----------------------------------------------------------------------------------------------------------
589 22 | {11,6,56,62,53,30} | {AAAAAAAA72908}
590 45 | {99,45} | {AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}
593 SELECT * FROM array_index_op_test WHERE t = '{AAAAAAAAAA646,A87088}' ORDER BY seqno;
595 -------+------------+------------------------
596 96 | {23,97,43} | {AAAAAAAAAA646,A87088}
599 -- Repeat some of the above tests but exercising bitmapscans instead
600 SET enable_indexscan = OFF;
601 SET enable_bitmapscan = ON;
602 SELECT * FROM array_index_op_test WHERE i @> '{32}' ORDER BY seqno;
604 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
605 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
606 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
607 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
608 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
609 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
610 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
613 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
615 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
616 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
617 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
618 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
619 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
620 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
621 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
624 SELECT * FROM array_index_op_test WHERE i @> '{17}' ORDER BY seqno;
626 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
627 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
628 12 | {17,99,18,52,91,72,0,43,96,23} | {AAAAA33250,AAAAAAAAAAAAAAAAAAA85420,AAAAAAAAAAA33576}
629 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
630 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
631 53 | {38,17} | {AAAAAAAAAAA21658}
632 65 | {61,5,76,59,17} | {AAAAAA99807,AAAAA64741,AAAAAAAAAAA53908,AA21643,AAAAAAAAA10012}
633 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
634 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
637 SELECT * FROM array_index_op_test WHERE i && '{17}' ORDER BY seqno;
639 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
640 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
641 12 | {17,99,18,52,91,72,0,43,96,23} | {AAAAA33250,AAAAAAAAAAAAAAAAAAA85420,AAAAAAAAAAA33576}
642 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
643 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
644 53 | {38,17} | {AAAAAAAAAAA21658}
645 65 | {61,5,76,59,17} | {AAAAAA99807,AAAAA64741,AAAAAAAAAAA53908,AA21643,AAAAAAAAA10012}
646 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
647 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
650 SELECT * FROM array_index_op_test WHERE i @> '{32,17}' ORDER BY seqno;
652 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
653 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
654 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
655 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
658 SELECT * FROM array_index_op_test WHERE i && '{32,17}' ORDER BY seqno;
660 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
661 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
662 12 | {17,99,18,52,91,72,0,43,96,23} | {AAAAA33250,AAAAAAAAAAAAAAAAAAA85420,AAAAAAAAAAA33576}
663 15 | {17,14,16,63,67} | {AA6416,AAAAAAAAAA646,AAAAA95309}
664 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
665 53 | {38,17} | {AAAAAAAAAAA21658}
666 65 | {61,5,76,59,17} | {AAAAAA99807,AAAAA64741,AAAAAAAAAAA53908,AA21643,AAAAAAAAA10012}
667 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
668 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
669 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
670 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
671 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
674 SELECT * FROM array_index_op_test WHERE i <@ '{38,34,32,89}' ORDER BY seqno;
676 -------+---------------+----------------------------------------------------------------------------------------------------------------------------
677 40 | {34} | {AAAAAAAAAAAAAA10611,AAAAAAAAAAAAAAAAAAA1205,AAAAAAAAAAA50956,AAAAAAAAAAAAAAAA31334,AAAAA70466,AAAAAAAA81587,AAAAAAA74623}
678 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
679 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
682 SELECT * FROM array_index_op_test WHERE i = '{47,77}' ORDER BY seqno;
684 -------+---------+-----------------------------------------------------------------------------------------------------------------
685 95 | {47,77} | {AAAAAAAAAAAAAAAAA764,AAAAAAAAAAA74076,AAAAAAAAAA18107,AAAAA40681,AAAAAAAAAAAAAAA35875,AAAAA60038,AAAAAAA56483}
688 -- And try it with a multicolumn GIN index
689 DROP INDEX intarrayidx, textarrayidx;
690 CREATE INDEX botharrayidx ON array_index_op_test USING gin (i, t);
691 SET enable_seqscan = OFF;
692 SET enable_indexscan = ON;
693 SET enable_bitmapscan = OFF;
694 SELECT * FROM array_index_op_test WHERE i @> '{32}' ORDER BY seqno;
696 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
697 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
698 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
699 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
700 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
701 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
702 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
705 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
707 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
708 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
709 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
710 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
711 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
712 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
713 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
716 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAA80240}' ORDER BY seqno;
718 -------+--------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
719 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
720 30 | {26,81,47,91,34} | {AAAAAAAAAAAAAAAAAAA70104,AAAAAAA80240}
721 64 | {26,19,34,24,81,78} | {A96617,AAAAAAAAAAAAAAAAAAA70104,A68938,AAAAAAAAAAA53908,AAAAAAAAAAAAAAA453,AA17009,AAAAAAA80240}
722 82 | {34,60,4,79,78,16,86,89,42,50} | {AAAAA40681,AAAAAAAAAAAAAAAAAA12591,AAAAAAA80240,AAAAAAAAAAAAAAAA55798,AAAAAAAAAAAAAAAAAAA70104}
723 88 | {41,90,77,24,6,24} | {AAAA35194,AAAA35194,AAAAAAA80240,AAAAAAAAAAA46154,AAAAAA58494,AAAAAAAAAAAAAAAAAAA17075,AAAAAAAAAAAAAAAAAA59334,AAAAAAAAAAAAAAAAAAA91804,AA74433}
724 97 | {54,2,86,65} | {47735,AAAAAAA99836,AAAAAAAAAAAAAAAAA6897,AAAAAAAAAAAAAAAA29150,AAAAAAA80240,AAAAAAAAAAAAAAAA98414,AAAAAAA56483,AAAAAAAAAAAAAAAA29150,AAAAAAA39692,AA21643}
725 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
728 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAA80240}' ORDER BY seqno;
730 -------+--------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
731 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
732 30 | {26,81,47,91,34} | {AAAAAAAAAAAAAAAAAAA70104,AAAAAAA80240}
733 64 | {26,19,34,24,81,78} | {A96617,AAAAAAAAAAAAAAAAAAA70104,A68938,AAAAAAAAAAA53908,AAAAAAAAAAAAAAA453,AA17009,AAAAAAA80240}
734 82 | {34,60,4,79,78,16,86,89,42,50} | {AAAAA40681,AAAAAAAAAAAAAAAAAA12591,AAAAAAA80240,AAAAAAAAAAAAAAAA55798,AAAAAAAAAAAAAAAAAAA70104}
735 88 | {41,90,77,24,6,24} | {AAAA35194,AAAA35194,AAAAAAA80240,AAAAAAAAAAA46154,AAAAAA58494,AAAAAAAAAAAAAAAAAAA17075,AAAAAAAAAAAAAAAAAA59334,AAAAAAAAAAAAAAAAAAA91804,AA74433}
736 97 | {54,2,86,65} | {47735,AAAAAAA99836,AAAAAAAAAAAAAAAAA6897,AAAAAAAAAAAAAAAA29150,AAAAAAA80240,AAAAAAAAAAAAAAAA98414,AAAAAAA56483,AAAAAAAAAAAAAAAA29150,AAAAAAA39692,AA21643}
737 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
740 SELECT * FROM array_index_op_test WHERE i @> '{32}' AND t && '{AAAAAAA80240}' ORDER BY seqno;
742 -------+-----------------------------+------------------------------------------------------------------------------
743 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
746 SELECT * FROM array_index_op_test WHERE i && '{32}' AND t @> '{AAAAAAA80240}' ORDER BY seqno;
748 -------+-----------------------------+------------------------------------------------------------------------------
749 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
752 SET enable_indexscan = OFF;
753 SET enable_bitmapscan = ON;
754 SELECT * FROM array_index_op_test WHERE i @> '{32}' ORDER BY seqno;
756 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
757 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
758 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
759 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
760 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
761 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
762 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
765 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
767 -------+---------------------------------+------------------------------------------------------------------------------------------------------------------------------------
768 6 | {39,35,5,94,17,92,60,32} | {AAAAAAAAAAAAAAA35875,AAAAAAAAAAAAAAAA23657}
769 74 | {32} | {AAAAAAAAAAAAAAAA1729,AAAAAAAAAAAAA22860,AAAAAA99807,AAAAA17383,AAAAAAAAAAAAAAA67062,AAAAAAAAAAA15165,AAAAAAAAAAA50956}
770 77 | {97,15,32,17,55,59,18,37,50,39} | {AAAAAAAAAAAA67946,AAAAAA54032,AAAAAAAA81587,55847,AAAAAAAAAAAAAA28620,AAAAAAAAAAAAAAAAA43052,AAAAAA75463,AAAA49534,AAAAAAAA44066}
771 89 | {40,32,17,6,30,88} | {AA44673,AAAAAAAAAAA6119,AAAAAAAAAAAAAAAA23657,AAAAAAAAAAAAAAAAAA47955,AAAAAAAAAAAAAAAA33598,AAAAAAAAAAA33576,AA44673}
772 98 | {38,34,32,89} | {AAAAAAAAAAAAAAAAAA71621,AAAA8857,AAAAAAAAAAAAAAAAAAA65037,AAAAAAAAAAAAAAAA31334,AAAAAAAAAA48845}
773 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
776 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAA80240}' ORDER BY seqno;
778 -------+--------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
779 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
780 30 | {26,81,47,91,34} | {AAAAAAAAAAAAAAAAAAA70104,AAAAAAA80240}
781 64 | {26,19,34,24,81,78} | {A96617,AAAAAAAAAAAAAAAAAAA70104,A68938,AAAAAAAAAAA53908,AAAAAAAAAAAAAAA453,AA17009,AAAAAAA80240}
782 82 | {34,60,4,79,78,16,86,89,42,50} | {AAAAA40681,AAAAAAAAAAAAAAAAAA12591,AAAAAAA80240,AAAAAAAAAAAAAAAA55798,AAAAAAAAAAAAAAAAAAA70104}
783 88 | {41,90,77,24,6,24} | {AAAA35194,AAAA35194,AAAAAAA80240,AAAAAAAAAAA46154,AAAAAA58494,AAAAAAAAAAAAAAAAAAA17075,AAAAAAAAAAAAAAAAAA59334,AAAAAAAAAAAAAAAAAAA91804,AA74433}
784 97 | {54,2,86,65} | {47735,AAAAAAA99836,AAAAAAAAAAAAAAAAA6897,AAAAAAAAAAAAAAAA29150,AAAAAAA80240,AAAAAAAAAAAAAAAA98414,AAAAAAA56483,AAAAAAAAAAAAAAAA29150,AAAAAAA39692,AA21643}
785 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
788 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAA80240}' ORDER BY seqno;
790 -------+--------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
791 19 | {52,82,17,74,23,46,69,51,75} | {AAAAAAAAAAAAA73084,AAAAA75968,AAAAAAAAAAAAAAAA14047,AAAAAAA80240,AAAAAAAAAAAAAAAAAAA1205,A68938}
792 30 | {26,81,47,91,34} | {AAAAAAAAAAAAAAAAAAA70104,AAAAAAA80240}
793 64 | {26,19,34,24,81,78} | {A96617,AAAAAAAAAAAAAAAAAAA70104,A68938,AAAAAAAAAAA53908,AAAAAAAAAAAAAAA453,AA17009,AAAAAAA80240}
794 82 | {34,60,4,79,78,16,86,89,42,50} | {AAAAA40681,AAAAAAAAAAAAAAAAAA12591,AAAAAAA80240,AAAAAAAAAAAAAAAA55798,AAAAAAAAAAAAAAAAAAA70104}
795 88 | {41,90,77,24,6,24} | {AAAA35194,AAAA35194,AAAAAAA80240,AAAAAAAAAAA46154,AAAAAA58494,AAAAAAAAAAAAAAAAAAA17075,AAAAAAAAAAAAAAAAAA59334,AAAAAAAAAAAAAAAAAAA91804,AA74433}
796 97 | {54,2,86,65} | {47735,AAAAAAA99836,AAAAAAAAAAAAAAAAA6897,AAAAAAAAAAAAAAAA29150,AAAAAAA80240,AAAAAAAAAAAAAAAA98414,AAAAAAA56483,AAAAAAAAAAAAAAAA29150,AAAAAAA39692,AA21643}
797 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
800 SELECT * FROM array_index_op_test WHERE i @> '{32}' AND t && '{AAAAAAA80240}' ORDER BY seqno;
802 -------+-----------------------------+------------------------------------------------------------------------------
803 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
806 SELECT * FROM array_index_op_test WHERE i && '{32}' AND t @> '{AAAAAAA80240}' ORDER BY seqno;
808 -------+-----------------------------+------------------------------------------------------------------------------
809 100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
812 RESET enable_seqscan;
813 RESET enable_indexscan;
814 RESET enable_bitmapscan;
818 CREATE INDEX hash_i4_index ON hash_i4_heap USING hash (random int4_ops);
819 CREATE INDEX hash_name_index ON hash_name_heap USING hash (random name_ops);
820 CREATE INDEX hash_txt_index ON hash_txt_heap USING hash (random text_ops);
821 CREATE INDEX hash_f8_index ON hash_f8_heap USING hash (random float8_ops);
822 -- CREATE INDEX hash_ovfl_index ON hash_ovfl_heap USING hash (x int4_ops);
824 -- Test functional index
826 CREATE TABLE func_index_heap (f1 text, f2 text);
827 CREATE UNIQUE INDEX func_index_index on func_index_heap (textcat(f1,f2));
828 INSERT INTO func_index_heap VALUES('ABC','DEF');
829 INSERT INTO func_index_heap VALUES('AB','CDEFG');
830 INSERT INTO func_index_heap VALUES('QWE','RTY');
831 -- this should fail because of unique index:
832 INSERT INTO func_index_heap VALUES('ABCD', 'EF');
833 ERROR: duplicate key value violates unique constraint "func_index_index"
834 DETAIL: Key (textcat(f1, f2))=(ABCDEF) already exists.
835 -- but this shouldn't:
836 INSERT INTO func_index_heap VALUES('QWERTY');
838 -- Same test, expressional index
840 DROP TABLE func_index_heap;
841 CREATE TABLE func_index_heap (f1 text, f2 text);
842 CREATE UNIQUE INDEX func_index_index on func_index_heap ((f1 || f2) text_ops);
843 INSERT INTO func_index_heap VALUES('ABC','DEF');
844 INSERT INTO func_index_heap VALUES('AB','CDEFG');
845 INSERT INTO func_index_heap VALUES('QWE','RTY');
846 -- this should fail because of unique index:
847 INSERT INTO func_index_heap VALUES('ABCD', 'EF');
848 ERROR: duplicate key value violates unique constraint "func_index_index"
849 DETAIL: Key ((f1 || f2))=(ABCDEF) already exists.
850 -- but this shouldn't:
851 INSERT INTO func_index_heap VALUES('QWERTY');
853 -- Also try building functional, expressional, and partial indexes on
854 -- tables that already contain data.
856 create unique index hash_f8_index_1 on hash_f8_heap(abs(random));
857 create unique index hash_f8_index_2 on hash_f8_heap((seqno + 1), random);
858 create unique index hash_f8_index_3 on hash_f8_heap(random) where seqno > 1000;
860 -- Try some concurrent index builds
862 -- Unfortunately this only tests about half the code paths because there are
863 -- no concurrent updates happening to the table at the same time.
864 CREATE TABLE concur_heap (f1 text, f2 text);
866 CREATE INDEX CONCURRENTLY concur_index1 ON concur_heap(f2,f1);
867 INSERT INTO concur_heap VALUES ('a','b');
868 INSERT INTO concur_heap VALUES ('b','b');
870 CREATE UNIQUE INDEX CONCURRENTLY concur_index2 ON concur_heap(f1);
871 -- check if constraint is set up properly to be enforced
872 INSERT INTO concur_heap VALUES ('b','x');
873 ERROR: duplicate key value violates unique constraint "concur_index2"
874 DETAIL: Key (f1)=(b) already exists.
875 -- check if constraint is enforced properly at build time
876 CREATE UNIQUE INDEX CONCURRENTLY concur_index3 ON concur_heap(f2);
877 ERROR: could not create unique index "concur_index3"
878 DETAIL: Key (f2)=(b) is duplicated.
879 -- test that expression indexes and partial indexes work concurrently
880 CREATE INDEX CONCURRENTLY concur_index4 on concur_heap(f2) WHERE f1='a';
881 CREATE INDEX CONCURRENTLY concur_index5 on concur_heap(f2) WHERE f1='x';
882 -- here we also check that you can default the index name
883 CREATE INDEX CONCURRENTLY on concur_heap((f2||f1));
884 -- You can't do a concurrent index build in a transaction
886 CREATE INDEX CONCURRENTLY concur_index7 ON concur_heap(f1);
887 ERROR: CREATE INDEX CONCURRENTLY cannot run inside a transaction block
889 -- But you can do a regular index build in a transaction
891 CREATE INDEX std_index on concur_heap(f2);
893 -- check to make sure that the failed indexes were cleaned up properly and the
894 -- successful indexes are created properly. Notably that they do NOT have the
895 -- "invalid" flag set.
897 Table "public.concur_heap"
898 Column | Type | Modifiers
899 --------+------+-----------
903 "concur_index2" UNIQUE, btree (f1)
904 "concur_index3" UNIQUE, btree (f2) INVALID
905 "concur_heap_expr_idx" btree ((f2 || f1))
906 "concur_index1" btree (f2, f1)
907 "concur_index4" btree (f2) WHERE f1 = 'a'::text
908 "concur_index5" btree (f2) WHERE f1 = 'x'::text
909 "std_index" btree (f2)
911 DROP TABLE concur_heap;
913 -- Tests for IS NULL/IS NOT NULL with b-tree indexes
915 SELECT unique1, unique2 INTO onek_with_null FROM onek;
916 INSERT INTO onek_with_null (unique1,unique2) VALUES (NULL, -1), (NULL, NULL);
917 CREATE UNIQUE INDEX onek_nulltest ON onek_with_null (unique2,unique1);
918 SET enable_seqscan = OFF;
919 SET enable_indexscan = ON;
920 SET enable_bitmapscan = ON;
921 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL;
927 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
933 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
939 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
945 DROP INDEX onek_nulltest;
946 CREATE UNIQUE INDEX onek_nulltest ON onek_with_null (unique2 desc,unique1);
947 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL;
953 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
959 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
965 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
971 DROP INDEX onek_nulltest;
972 CREATE UNIQUE INDEX onek_nulltest ON onek_with_null (unique2 desc nulls last,unique1);
973 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL;
979 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
985 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
991 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
997 DROP INDEX onek_nulltest;
998 CREATE UNIQUE INDEX onek_nulltest ON onek_with_null (unique2 nulls first,unique1);
999 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL;
1005 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
1011 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
1017 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
1023 RESET enable_seqscan;
1024 RESET enable_indexscan;
1025 RESET enable_bitmapscan;
1026 DROP TABLE onek_with_null;