SET enable_seqscan to false; -- test search for "not equals" CREATE TABLE test_ne ( a TIMESTAMP, b NUMERIC ); CREATE INDEX test_ne_idx ON test_ne USING gist (a, b); INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000); INSERT INTO test_ne VALUES('2007-02-03', -91.3); INSERT INTO test_ne VALUES('2011-09-01', 43.7); INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000); SET enable_indexscan to false; EXPLAIN (COSTS OFF) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7; QUERY PLAN ------------------------------------------------------------------------------------------------------ Bitmap Heap Scan on test_ne Recheck Cond: ((a <> 'Thu Jan 01 00:00:00 2009'::timestamp without time zone) AND (b <> 10.7)) -> Bitmap Index Scan on test_ne_idx Index Cond: ((a <> 'Thu Jan 01 00:00:00 2009'::timestamp without time zone) AND (b <> 10.7)) (4 rows) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7; a | b --------------------------+------- Sat Feb 03 00:00:00 2007 | -91.3 Thu Sep 01 00:00:00 2011 | 43.7 (2 rows) RESET enable_indexscan; -- test search for "not equals" using an exclusion constraint CREATE TABLE zoo ( cage INTEGER, animal TEXT, EXCLUDE USING gist (cage WITH =, animal WITH <>) ); INSERT INTO zoo VALUES(123, 'zebra'); INSERT INTO zoo VALUES(123, 'zebra'); INSERT INTO zoo VALUES(123, 'lion'); ERROR: conflicting key value violates exclusion constraint "zoo_cage_animal_excl" DETAIL: Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra). INSERT INTO zoo VALUES(124, 'lion');