-- enum check
create type rainbow as enum ('r','o','y','g','b','i','v');
CREATE TABLE enumtmp (a rainbow);
\copy enumtmp from 'data/enum.data'
SET enable_seqscan=on;
select a, count(*) from enumtmp group by a order by 1;
 a | count 
---+-------
 r |    76
 o |    78
 y |    73
 g |    75
 b |    77
 i |    78
 v |    75
   |    63
(8 rows)

SELECT count(*) FROM enumtmp WHERE a <  'g'::rainbow;
 count 
-------
   227
(1 row)

SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow;
 count 
-------
   302
(1 row)

SELECT count(*) FROM enumtmp WHERE a  = 'g'::rainbow;
 count 
-------
    75
(1 row)

SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow;
 count 
-------
   305
(1 row)

SELECT count(*) FROM enumtmp WHERE a >  'g'::rainbow;
 count 
-------
   230
(1 row)

CREATE INDEX enumidx ON enumtmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM enumtmp WHERE a <  'g'::rainbow;
 count 
-------
   227
(1 row)

SELECT count(*) FROM enumtmp WHERE a <= 'g'::rainbow;
 count 
-------
   302
(1 row)

SELECT count(*) FROM enumtmp WHERE a  = 'g'::rainbow;
 count 
-------
    75
(1 row)

SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow;
 count 
-------
   305
(1 row)

SELECT count(*) FROM enumtmp WHERE a >  'g'::rainbow;
 count 
-------
   230
(1 row)

EXPLAIN (COSTS OFF)
SELECT count(*) FROM enumtmp WHERE a >= 'g'::rainbow;
                   QUERY PLAN                    
-------------------------------------------------
 Aggregate
   ->  Gather Motion 3:1  (slice1; segments: 3)
         ->  Index Scan using enumidx on enumtmp
               Index Cond: (a >= 'g'::rainbow)
               Filter: (a >= 'g'::rainbow)
 Optimizer: Pivotal Optimizer (GPORCA)
(6 rows)

