-- char check CREATE TABLE chartmp (a char(32)); \copy chartmp from 'data/char.data' SET enable_seqscan=on; SELECT count(*) FROM chartmp WHERE a < '31b0'::char(32); count ------- 587 (1 row) SELECT count(*) FROM chartmp WHERE a <= '31b0'::char(32); count ------- 588 (1 row) SELECT count(*) FROM chartmp WHERE a = '31b0'::char(32); count ------- 1 (1 row) SELECT count(*) FROM chartmp WHERE a >= '31b0'::char(32); count ------- 401 (1 row) SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32); count ------- 400 (1 row) CREATE INDEX charidx ON chartmp USING GIST ( a ); SET enable_seqscan=off; SELECT count(*) FROM chartmp WHERE a < '31b0'::char(32); count ------- 587 (1 row) SELECT count(*) FROM chartmp WHERE a <= '31b0'::char(32); count ------- 588 (1 row) SELECT count(*) FROM chartmp WHERE a = '31b0'::char(32); count ------- 1 (1 row) SELECT count(*) FROM chartmp WHERE a >= '31b0'::char(32); count ------- 401 (1 row) SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32); count ------- 400 (1 row) -- Test index-only scans SET enable_bitmapscan=off; EXPLAIN (COSTS OFF) SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c'; QUERY PLAN --------------------------------------------------------------- Index Only Scan using charidx on chartmp Index Cond: ((a >= '31a'::bpchar) AND (a <= '31c'::bpchar)) (2 rows) SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c'; a ---------------------------------- 31b0 (1 row)