-- bool check CREATE TABLE booltmp (a bool); INSERT INTO booltmp VALUES (false), (true); SET enable_seqscan=on; SELECT count(*) FROM booltmp WHERE a < true; count ------- 1 (1 row) SELECT count(*) FROM booltmp WHERE a <= true; count ------- 2 (1 row) SELECT count(*) FROM booltmp WHERE a = true; count ------- 1 (1 row) SELECT count(*) FROM booltmp WHERE a >= true; count ------- 1 (1 row) SELECT count(*) FROM booltmp WHERE a > true; count ------- 0 (1 row) CREATE INDEX boolidx ON booltmp USING gist ( a ); SET enable_seqscan=off; SELECT count(*) FROM booltmp WHERE a < true; count ------- 1 (1 row) SELECT count(*) FROM booltmp WHERE a <= true; count ------- 2 (1 row) SELECT count(*) FROM booltmp WHERE a = true; count ------- 1 (1 row) SELECT count(*) FROM booltmp WHERE a >= true; count ------- 1 (1 row) SELECT count(*) FROM booltmp WHERE a > true; count ------- 0 (1 row) -- Test index-only scans SET enable_bitmapscan=off; EXPLAIN (COSTS OFF) SELECT * FROM booltmp WHERE a; QUERY PLAN ------------------------------------------ Index Only Scan using boolidx on booltmp Index Cond: (a = true) (2 rows) SELECT * FROM booltmp WHERE a; a --- t (1 row) EXPLAIN (COSTS OFF) SELECT * FROM booltmp WHERE NOT a; QUERY PLAN ------------------------------------------ Index Only Scan using boolidx on booltmp Index Cond: (a = false) (2 rows) SELECT * FROM booltmp WHERE NOT a; a --- f (1 row)