-- money check CREATE TABLE moneytmp (a money); \copy moneytmp from 'data/cash.data' SET enable_seqscan=on; SELECT count(*) FROM moneytmp WHERE a < '22649.64'; count ------- 289 (1 row) SELECT count(*) FROM moneytmp WHERE a <= '22649.64'; count ------- 290 (1 row) SELECT count(*) FROM moneytmp WHERE a = '22649.64'; count ------- 1 (1 row) SELECT count(*) FROM moneytmp WHERE a >= '22649.64'; count ------- 254 (1 row) SELECT count(*) FROM moneytmp WHERE a > '22649.64'; count ------- 253 (1 row) SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; a | ?column? ------------+---------- $21,472.79 | $0.00 $21,469.25 | $3.54 $21,915.01 | $442.22 (3 rows) SET client_min_messages = DEBUG1; CREATE INDEX moneyidx ON moneytmp USING gist ( a ); DEBUG: building index "moneyidx" on table "moneytmp" serially DEBUG: using sorted GiST build CREATE INDEX moneyidx_b ON moneytmp USING gist ( a ) WITH (buffering=on); DEBUG: building index "moneyidx_b" on table "moneytmp" serially DROP INDEX moneyidx_b; RESET client_min_messages; SET enable_seqscan=off; SELECT count(*) FROM moneytmp WHERE a < '22649.64'::money; count ------- 289 (1 row) SELECT count(*) FROM moneytmp WHERE a <= '22649.64'::money; count ------- 290 (1 row) SELECT count(*) FROM moneytmp WHERE a = '22649.64'::money; count ------- 1 (1 row) SELECT count(*) FROM moneytmp WHERE a >= '22649.64'::money; count ------- 254 (1 row) SELECT count(*) FROM moneytmp WHERE a > '22649.64'::money; count ------- 253 (1 row) EXPLAIN (COSTS OFF) SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; QUERY PLAN -------------------------------------------------- Limit -> Index Only Scan using moneyidx on moneytmp Order By: (a <-> '$21,472.79'::money) (3 rows) SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3; a | ?column? ------------+---------- $21,472.79 | $0.00 $21,469.25 | $3.54 $21,915.01 | $442.22 (3 rows)