]> granicus.if.org Git - postgresql/blob - src/test/regress/expected/create_index.out
27d5e848e55898cef02170ca7317a499df35ea5e
[postgresql] / src / test / regress / expected / create_index.out
1 --
2 -- CREATE_INDEX
3 -- Create ancillary data structures (i.e. indices)
4 --
5 --
6 -- BTREE
7 --
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);
22 -- test comments
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;
27 --
28 -- BTREE ascending/descending cases
29 --
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
33 -- "lost".
34 --
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);
39 --
40 -- BTREE partial indices
41 --
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)
45         where stringu1 < 'B';
46 CREATE INDEX onek2_stu1_prtl ON onek2 USING btree(stringu1 name_ops)
47         where onek2.stringu1 >= 'J' and onek2.stringu1 < 'K';
48 --
49 -- GiST (rtree-equivalent opclasses only)
50 --
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];
69        home_base       
70 -----------------------
71  (337,455),(240,359)
72  (1444,403),(1346,344)
73 (2 rows)
74
75 SELECT count(*) FROM fast_emp4000 WHERE home_base && '(1000,1000,0,0)'::box;
76  count 
77 -------
78      2
79 (1 row)
80
81 SELECT count(*) FROM fast_emp4000 WHERE home_base IS NULL;
82  count 
83 -------
84    278
85 (1 row)
86
87 SELECT * FROM polygon_tbl WHERE f1 ~ '((1,1),(2,2),(2,1))'::polygon
88     ORDER BY (poly_center(f1))[0];
89          f1          
90 ---------------------
91  ((2,0),(2,4),(0,0))
92 (1 row)
93
94 SELECT * FROM circle_tbl WHERE f1 && circle(point(1,-2), 1)
95     ORDER BY area(f1);
96       f1       
97 ---------------
98  <(1,2),3>
99  <(1,3),5>
100  <(1,2),100>
101  <(100,1),115>
102 (4 rows)
103
104 SELECT count(*) FROM gpolygon_tbl WHERE f1 && '(1000,1000,0,0)'::polygon;
105  count 
106 -------
107      2
108 (1 row)
109
110 SELECT count(*) FROM gcircle_tbl WHERE f1 && '<(500,500),500>'::circle;
111  count 
112 -------
113      2
114 (1 row)
115
116 SELECT count(*) FROM point_tbl WHERE f1 <@ box '(0,0,100,100)';
117  count 
118 -------
119      3
120 (1 row)
121
122 SELECT count(*) FROM point_tbl WHERE box '(0,0,100,100)' @> f1;
123  count 
124 -------
125      3
126 (1 row)
127
128 SELECT count(*) FROM point_tbl WHERE f1 <@ polygon '(0,0),(0,100),(100,100),(50,50),(100,0),(0,0)';
129  count 
130 -------
131      3
132 (1 row)
133
134 SELECT count(*) FROM point_tbl WHERE f1 <@ circle '<(50,50),50>';
135  count 
136 -------
137      1
138 (1 row)
139
140 SELECT count(*) FROM point_tbl p WHERE p.f1 << '(0.0, 0.0)';
141  count 
142 -------
143      3
144 (1 row)
145
146 SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
147  count 
148 -------
149      2
150 (1 row)
151
152 SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
153  count 
154 -------
155      1
156 (1 row)
157
158 SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
159  count 
160 -------
161      3
162 (1 row)
163
164 SELECT count(*) FROM point_tbl p WHERE p.f1 ~= '(-5, -12)';
165  count 
166 -------
167      1
168 (1 row)
169
170 SET enable_seqscan = OFF;
171 SET enable_indexscan = ON;
172 SET enable_bitmapscan = ON;
173 EXPLAIN (COSTS OFF)
174 SELECT * FROM fast_emp4000
175     WHERE home_base @ '(200,200),(2000,1000)'::box
176     ORDER BY (home_base[0])[0];
177                               QUERY PLAN                              
178 ----------------------------------------------------------------------
179  Sort
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)
185 (6 rows)
186
187 SELECT * FROM fast_emp4000
188     WHERE home_base @ '(200,200),(2000,1000)'::box
189     ORDER BY (home_base[0])[0];
190        home_base       
191 -----------------------
192  (337,455),(240,359)
193  (1444,403),(1346,344)
194 (2 rows)
195
196 EXPLAIN (COSTS OFF)
197 SELECT count(*) FROM fast_emp4000 WHERE home_base && '(1000,1000,0,0)'::box;
198                             QUERY PLAN                             
199 -------------------------------------------------------------------
200  Aggregate
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)
205 (5 rows)
206
207 SELECT count(*) FROM fast_emp4000 WHERE home_base && '(1000,1000,0,0)'::box;
208  count 
209 -------
210      2
211 (1 row)
212
213 EXPLAIN (COSTS OFF)
214 SELECT count(*) FROM fast_emp4000 WHERE home_base IS NULL;
215                   QUERY PLAN                   
216 -----------------------------------------------
217  Aggregate
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)
222 (5 rows)
223
224 SELECT count(*) FROM fast_emp4000 WHERE home_base IS NULL;
225  count 
226 -------
227    278
228 (1 row)
229
230 EXPLAIN (COSTS OFF)
231 SELECT * FROM polygon_tbl WHERE f1 ~ '((1,1),(2,2),(2,1))'::polygon
232     ORDER BY (poly_center(f1))[0];
233                         QUERY PLAN                         
234 -----------------------------------------------------------
235  Sort
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)
239 (4 rows)
240
241 SELECT * FROM polygon_tbl WHERE f1 ~ '((1,1),(2,2),(2,1))'::polygon
242     ORDER BY (poly_center(f1))[0];
243          f1          
244 ---------------------
245  ((2,0),(2,4),(0,0))
246 (1 row)
247
248 EXPLAIN (COSTS OFF)
249 SELECT * FROM circle_tbl WHERE f1 && circle(point(1,-2), 1)
250     ORDER BY area(f1);
251                     QUERY PLAN                    
252 --------------------------------------------------
253  Sort
254    Sort Key: (area(f1))
255    ->  Index Scan using gcircleind on circle_tbl
256          Index Cond: (f1 && '<(1,-2),1>'::circle)
257 (4 rows)
258
259 SELECT * FROM circle_tbl WHERE f1 && circle(point(1,-2), 1)
260     ORDER BY area(f1);
261       f1       
262 ---------------
263  <(1,2),3>
264  <(1,3),5>
265  <(1,2),100>
266  <(100,1),115>
267 (4 rows)
268
269 EXPLAIN (COSTS OFF)
270 SELECT count(*) FROM gpolygon_tbl WHERE f1 && '(1000,1000,0,0)'::polygon;
271                             QUERY PLAN                            
272 ------------------------------------------------------------------
273  Aggregate
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)
278 (5 rows)
279
280 SELECT count(*) FROM gpolygon_tbl WHERE f1 && '(1000,1000,0,0)'::polygon;
281  count 
282 -------
283      2
284 (1 row)
285
286 EXPLAIN (COSTS OFF)
287 SELECT count(*) FROM gcircle_tbl WHERE f1 && '<(500,500),500>'::circle;
288                          QUERY PLAN                          
289 -------------------------------------------------------------
290  Aggregate
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)
295 (5 rows)
296
297 SELECT count(*) FROM gcircle_tbl WHERE f1 && '<(500,500),500>'::circle;
298  count 
299 -------
300      2
301 (1 row)
302
303 EXPLAIN (COSTS OFF)
304 SELECT count(*) FROM point_tbl WHERE f1 <@ box '(0,0,100,100)';
305                      QUERY PLAN                     
306 ----------------------------------------------------
307  Aggregate
308    ->  Index Scan using gpointind on point_tbl
309          Index Cond: (f1 <@ '(100,100),(0,0)'::box)
310 (3 rows)
311
312 SELECT count(*) FROM point_tbl WHERE f1 <@ box '(0,0,100,100)';
313  count 
314 -------
315      3
316 (1 row)
317
318 EXPLAIN (COSTS OFF)
319 SELECT count(*) FROM point_tbl WHERE box '(0,0,100,100)' @> f1;
320                      QUERY PLAN                     
321 ----------------------------------------------------
322  Aggregate
323    ->  Index Scan using gpointind on point_tbl
324          Index Cond: ('(100,100),(0,0)'::box @> f1)
325 (3 rows)
326
327 SELECT count(*) FROM point_tbl WHERE box '(0,0,100,100)' @> f1;
328  count 
329 -------
330      3
331 (1 row)
332
333 EXPLAIN (COSTS OFF)
334 SELECT count(*) FROM point_tbl WHERE f1 <@ polygon '(0,0),(0,100),(100,100),(50,50),(100,0),(0,0)';
335                                        QUERY PLAN                                       
336 ----------------------------------------------------------------------------------------
337  Aggregate
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)
340 (3 rows)
341
342 SELECT count(*) FROM point_tbl WHERE f1 <@ polygon '(0,0),(0,100),(100,100),(50,50),(100,0),(0,0)';
343  count 
344 -------
345      3
346 (1 row)
347
348 EXPLAIN (COSTS OFF)
349 SELECT count(*) FROM point_tbl WHERE f1 <@ circle '<(50,50),50>';
350                      QUERY PLAN                     
351 ----------------------------------------------------
352  Aggregate
353    ->  Index Scan using gpointind on point_tbl
354          Index Cond: (f1 <@ '<(50,50),50>'::circle)
355 (3 rows)
356
357 SELECT count(*) FROM point_tbl WHERE f1 <@ circle '<(50,50),50>';
358  count 
359 -------
360      1
361 (1 row)
362
363 EXPLAIN (COSTS OFF)
364 SELECT count(*) FROM point_tbl p WHERE p.f1 << '(0.0, 0.0)';
365                    QUERY PLAN                    
366 -------------------------------------------------
367  Aggregate
368    ->  Index Scan using gpointind on point_tbl p
369          Index Cond: (f1 << '(0,0)'::point)
370 (3 rows)
371
372 SELECT count(*) FROM point_tbl p WHERE p.f1 << '(0.0, 0.0)';
373  count 
374 -------
375      3
376 (1 row)
377
378 EXPLAIN (COSTS OFF)
379 SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
380                    QUERY PLAN                    
381 -------------------------------------------------
382  Aggregate
383    ->  Index Scan using gpointind on point_tbl p
384          Index Cond: (f1 >> '(0,0)'::point)
385 (3 rows)
386
387 SELECT count(*) FROM point_tbl p WHERE p.f1 >> '(0.0, 0.0)';
388  count 
389 -------
390      2
391 (1 row)
392
393 EXPLAIN (COSTS OFF)
394 SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
395                    QUERY PLAN                    
396 -------------------------------------------------
397  Aggregate
398    ->  Index Scan using gpointind on point_tbl p
399          Index Cond: (f1 <^ '(0,0)'::point)
400 (3 rows)
401
402 SELECT count(*) FROM point_tbl p WHERE p.f1 <^ '(0.0, 0.0)';
403  count 
404 -------
405      1
406 (1 row)
407
408 EXPLAIN (COSTS OFF)
409 SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
410                    QUERY PLAN                    
411 -------------------------------------------------
412  Aggregate
413    ->  Index Scan using gpointind on point_tbl p
414          Index Cond: (f1 >^ '(0,0)'::point)
415 (3 rows)
416
417 SELECT count(*) FROM point_tbl p WHERE p.f1 >^ '(0.0, 0.0)';
418  count 
419 -------
420      3
421 (1 row)
422
423 EXPLAIN (COSTS OFF)
424 SELECT count(*) FROM point_tbl p WHERE p.f1 ~= '(-5, -12)';
425                    QUERY PLAN                    
426 -------------------------------------------------
427  Aggregate
428    ->  Index Scan using gpointind on point_tbl p
429          Index Cond: (f1 ~= '(-5,-12)'::point)
430 (3 rows)
431
432 SELECT count(*) FROM point_tbl p WHERE p.f1 ~= '(-5, -12)';
433  count 
434 -------
435      1
436 (1 row)
437
438 RESET enable_seqscan;
439 RESET enable_indexscan;
440 RESET enable_bitmapscan;
441 --
442 -- GIN over int[] and text[]
443 --
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;
449  seqno |                i                |                                                                 t                                                                  
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}
457 (6 rows)
458
459 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
460  seqno |                i                |                                                                 t                                                                  
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}
468 (6 rows)
469
470 SELECT * FROM array_index_op_test WHERE i @> '{17}' ORDER BY seqno;
471  seqno |                i                |                                                                 t                                                                  
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}
481 (8 rows)
482
483 SELECT * FROM array_index_op_test WHERE i && '{17}' ORDER BY seqno;
484  seqno |                i                |                                                                 t                                                                  
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}
494 (8 rows)
495
496 SELECT * FROM array_index_op_test WHERE i @> '{32,17}' ORDER BY seqno;
497  seqno |                i                |                                                                 t                                                                  
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}
502 (3 rows)
503
504 SELECT * FROM array_index_op_test WHERE i && '{32,17}' ORDER BY seqno;
505  seqno |                i                |                                                                 t                                                                  
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}
518 (11 rows)
519
520 SELECT * FROM array_index_op_test WHERE i <@ '{38,34,32,89}' ORDER BY seqno;
521  seqno |       i       |                                                             t                                                              
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}
526 (3 rows)
527
528 SELECT * FROM array_index_op_test WHERE i = '{47,77}' ORDER BY seqno;
529  seqno |    i    |                                                        t                                                        
530 -------+---------+-----------------------------------------------------------------------------------------------------------------
531     95 | {47,77} | {AAAAAAAAAAAAAAAAA764,AAAAAAAAAAA74076,AAAAAAAAAA18107,AAAAA40681,AAAAAAAAAAAAAAA35875,AAAAA60038,AAAAAAA56483}
532 (1 row)
533
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;
536  seqno |           i           |                                                                     t                                                                      
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}
542 (4 rows)
543
544 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAA72908}' ORDER BY seqno;
545  seqno |           i           |                                                                     t                                                                      
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}
551 (4 rows)
552
553 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAAAAA646}' ORDER BY seqno;
554  seqno |        i         |                                 t                                  
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}
559 (3 rows)
560
561 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAAAA646}' ORDER BY seqno;
562  seqno |        i         |                                 t                                  
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}
567 (3 rows)
568
569 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAAA72908,AAAAAAAAAA646}' ORDER BY seqno;
570  seqno |  i   |                                 t                                  
571 -------+------+--------------------------------------------------------------------
572     79 | {45} | {AAAAAAAAAA646,AAAAAAAAAAAAAAAAAAA70415,AAAAAA43678,AAAAAAAA72908}
573 (1 row)
574
575 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAAA72908,AAAAAAAAAA646}' ORDER BY seqno;
576  seqno |           i           |                                                                     t                                                                      
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}
584 (6 rows)
585
586 SELECT * FROM array_index_op_test WHERE t <@ '{AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}' ORDER BY seqno;
587  seqno |         i          |                                                     t                                                     
588 -------+--------------------+-----------------------------------------------------------------------------------------------------------
589     22 | {11,6,56,62,53,30} | {AAAAAAAA72908}
590     45 | {99,45}            | {AAAAAAAA72908,AAAAAAAAAAAAAAAAAAA17075,AA88409,AAAAAAAAAAAAAAAAAA36842,AAAAAAA48038,AAAAAAAAAAAAAA10611}
591 (2 rows)
592
593 SELECT * FROM array_index_op_test WHERE t = '{AAAAAAAAAA646,A87088}' ORDER BY seqno;
594  seqno |     i      |           t            
595 -------+------------+------------------------
596     96 | {23,97,43} | {AAAAAAAAAA646,A87088}
597 (1 row)
598
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;
603  seqno |                i                |                                                                 t                                                                  
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}
611 (6 rows)
612
613 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
614  seqno |                i                |                                                                 t                                                                  
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}
622 (6 rows)
623
624 SELECT * FROM array_index_op_test WHERE i @> '{17}' ORDER BY seqno;
625  seqno |                i                |                                                                 t                                                                  
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}
635 (8 rows)
636
637 SELECT * FROM array_index_op_test WHERE i && '{17}' ORDER BY seqno;
638  seqno |                i                |                                                                 t                                                                  
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}
648 (8 rows)
649
650 SELECT * FROM array_index_op_test WHERE i @> '{32,17}' ORDER BY seqno;
651  seqno |                i                |                                                                 t                                                                  
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}
656 (3 rows)
657
658 SELECT * FROM array_index_op_test WHERE i && '{32,17}' ORDER BY seqno;
659  seqno |                i                |                                                                 t                                                                  
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}
672 (11 rows)
673
674 SELECT * FROM array_index_op_test WHERE i <@ '{38,34,32,89}' ORDER BY seqno;
675  seqno |       i       |                                                             t                                                              
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}
680 (3 rows)
681
682 SELECT * FROM array_index_op_test WHERE i = '{47,77}' ORDER BY seqno;
683  seqno |    i    |                                                        t                                                        
684 -------+---------+-----------------------------------------------------------------------------------------------------------------
685     95 | {47,77} | {AAAAAAAAAAAAAAAAA764,AAAAAAAAAAA74076,AAAAAAAAAA18107,AAAAA40681,AAAAAAAAAAAAAAA35875,AAAAA60038,AAAAAAA56483}
686 (1 row)
687
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;
695  seqno |                i                |                                                                 t                                                                  
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}
703 (6 rows)
704
705 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
706  seqno |                i                |                                                                 t                                                                  
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}
714 (6 rows)
715
716 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAA80240}' ORDER BY seqno;
717  seqno |               i                |                                                                              t                                                                              
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}
726 (7 rows)
727
728 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAA80240}' ORDER BY seqno;
729  seqno |               i                |                                                                              t                                                                              
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}
738 (7 rows)
739
740 SELECT * FROM array_index_op_test WHERE i @> '{32}' AND t && '{AAAAAAA80240}' ORDER BY seqno;
741  seqno |              i              |                                      t                                       
742 -------+-----------------------------+------------------------------------------------------------------------------
743    100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
744 (1 row)
745
746 SELECT * FROM array_index_op_test WHERE i && '{32}' AND t @> '{AAAAAAA80240}' ORDER BY seqno;
747  seqno |              i              |                                      t                                       
748 -------+-----------------------------+------------------------------------------------------------------------------
749    100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
750 (1 row)
751
752 SET enable_indexscan = OFF;
753 SET enable_bitmapscan = ON;
754 SELECT * FROM array_index_op_test WHERE i @> '{32}' ORDER BY seqno;
755  seqno |                i                |                                                                 t                                                                  
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}
763 (6 rows)
764
765 SELECT * FROM array_index_op_test WHERE i && '{32}' ORDER BY seqno;
766  seqno |                i                |                                                                 t                                                                  
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}
774 (6 rows)
775
776 SELECT * FROM array_index_op_test WHERE t @> '{AAAAAAA80240}' ORDER BY seqno;
777  seqno |               i                |                                                                              t                                                                              
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}
786 (7 rows)
787
788 SELECT * FROM array_index_op_test WHERE t && '{AAAAAAA80240}' ORDER BY seqno;
789  seqno |               i                |                                                                              t                                                                              
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}
798 (7 rows)
799
800 SELECT * FROM array_index_op_test WHERE i @> '{32}' AND t && '{AAAAAAA80240}' ORDER BY seqno;
801  seqno |              i              |                                      t                                       
802 -------+-----------------------------+------------------------------------------------------------------------------
803    100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
804 (1 row)
805
806 SELECT * FROM array_index_op_test WHERE i && '{32}' AND t @> '{AAAAAAA80240}' ORDER BY seqno;
807  seqno |              i              |                                      t                                       
808 -------+-----------------------------+------------------------------------------------------------------------------
809    100 | {85,32,57,39,49,84,32,3,30} | {AAAAAAA80240,AAAAAAAAAAAAAAAA1729,AAAAA60038,AAAAAAAAAAA92631,AAAAAAAA9523}
810 (1 row)
811
812 RESET enable_seqscan;
813 RESET enable_indexscan;
814 RESET enable_bitmapscan;
815 --
816 -- HASH
817 --
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);
823 --
824 -- Test functional index
825 --
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');
837 --
838 -- Same test, expressional index
839 --
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');
852 --
853 -- Also try building functional, expressional, and partial indexes on
854 -- tables that already contain data.
855 --
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;
859 --
860 -- Try some concurrent index builds
861 --
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);
865 -- empty table
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');
869 -- unique index
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
885 BEGIN;
886 CREATE INDEX CONCURRENTLY concur_index7 ON concur_heap(f1);
887 ERROR:  CREATE INDEX CONCURRENTLY cannot run inside a transaction block
888 COMMIT;
889 -- But you can do a regular index build in a transaction
890 BEGIN;
891 CREATE INDEX std_index on concur_heap(f2);
892 COMMIT;
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.
896 \d concur_heap
897 Table "public.concur_heap"
898  Column | Type | Modifiers 
899 --------+------+-----------
900  f1     | text | 
901  f2     | text | 
902 Indexes:
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)
910
911 DROP TABLE concur_heap;
912 --
913 -- Tests for IS NULL/IS NOT NULL with b-tree indexes
914 --
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;
922  count 
923 -------
924      2
925 (1 row)
926
927 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
928  count 
929 -------
930      1
931 (1 row)
932
933 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
934  count 
935 -------
936   1000
937 (1 row)
938
939 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
940  count 
941 -------
942      1
943 (1 row)
944
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;
948  count 
949 -------
950      2
951 (1 row)
952
953 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
954  count 
955 -------
956      1
957 (1 row)
958
959 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
960  count 
961 -------
962   1000
963 (1 row)
964
965 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
966  count 
967 -------
968      1
969 (1 row)
970
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;
974  count 
975 -------
976      2
977 (1 row)
978
979 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
980  count 
981 -------
982      1
983 (1 row)
984
985 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
986  count 
987 -------
988   1000
989 (1 row)
990
991 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
992  count 
993 -------
994      1
995 (1 row)
996
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;
1000  count 
1001 -------
1002      2
1003 (1 row)
1004
1005 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NULL;
1006  count 
1007 -------
1008      1
1009 (1 row)
1010
1011 SELECT count(*) FROM onek_with_null WHERE unique1 IS NOT NULL;
1012  count 
1013 -------
1014   1000
1015 (1 row)
1016
1017 SELECT count(*) FROM onek_with_null WHERE unique1 IS NULL AND unique2 IS NOT NULL;
1018  count 
1019 -------
1020      1
1021 (1 row)
1022
1023 RESET enable_seqscan;
1024 RESET enable_indexscan;
1025 RESET enable_bitmapscan;
1026 DROP TABLE onek_with_null;