-- 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)