-- interval check
CREATE TABLE intervaltmp (a interval);
\copy intervaltmp from 'data/interval.data'
SET enable_seqscan=on;
SELECT count(*) FROM intervaltmp WHERE a <  '199 days 21:21:23';
 count 
-------
   329
(1 row)

SELECT count(*) FROM intervaltmp WHERE a <= '199 days 21:21:23';
 count 
-------
   330
(1 row)

SELECT count(*) FROM intervaltmp WHERE a  = '199 days 21:21:23';
 count 
-------
     1
(1 row)

SELECT count(*) FROM intervaltmp WHERE a >= '199 days 21:21:23';
 count 
-------
   271
(1 row)

SELECT count(*) FROM intervaltmp WHERE a >  '199 days 21:21:23';
 count 
-------
   270
(1 row)

SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
                  a                  |               ?column?               
-------------------------------------+--------------------------------------
 @ 199 days 21 hours 21 mins 23 secs | @ 0
 @ 183 days 6 hours 52 mins 48 secs  | @ 16 days 14 hours 28 mins 35 secs
 @ 220 days 19 hours 5 mins 42 secs  | @ 21 days -2 hours -15 mins -41 secs
(3 rows)

CREATE INDEX intervalidx ON intervaltmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM intervaltmp WHERE a <  '199 days 21:21:23'::interval;
 count 
-------
   329
(1 row)

SELECT count(*) FROM intervaltmp WHERE a <= '199 days 21:21:23'::interval;
 count 
-------
   330
(1 row)

SELECT count(*) FROM intervaltmp WHERE a  = '199 days 21:21:23'::interval;
 count 
-------
     1
(1 row)

SELECT count(*) FROM intervaltmp WHERE a >= '199 days 21:21:23'::interval;
 count 
-------
   271
(1 row)

SELECT count(*) FROM intervaltmp WHERE a >  '199 days 21:21:23'::interval;
 count 
-------
   270
(1 row)

EXPLAIN (COSTS OFF)
SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
                                QUERY PLAN                                 
---------------------------------------------------------------------------
 Limit
   ->  Index Only Scan using intervalidx on intervaltmp
         Order By: (a <-> '@ 199 days 21 hours 21 mins 23 secs'::interval)
(3 rows)

SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
                  a                  |               ?column?               
-------------------------------------+--------------------------------------
 @ 199 days 21 hours 21 mins 23 secs | @ 0
 @ 183 days 6 hours 52 mins 48 secs  | @ 16 days 14 hours 28 mins 35 secs
 @ 220 days 19 hours 5 mins 42 secs  | @ 21 days -2 hours -15 mins -41 secs
(3 rows)

SET enable_indexonlyscan=off;
EXPLAIN (COSTS OFF)
SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
                                QUERY PLAN                                 
---------------------------------------------------------------------------
 Limit
   ->  Index Scan using intervalidx on intervaltmp
         Order By: (a <-> '@ 199 days 21 hours 21 mins 23 secs'::interval)
(3 rows)

SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
                  a                  |               ?column?               
-------------------------------------+--------------------------------------
 @ 199 days 21 hours 21 mins 23 secs | @ 0
 @ 183 days 6 hours 52 mins 48 secs  | @ 16 days 14 hours 28 mins 35 secs
 @ 220 days 19 hours 5 mins 42 secs  | @ 21 days -2 hours -15 mins -41 secs
(3 rows)