create type cashrange as range (subtype=money); CREATE TABLE ctest (a int, b cashrange); INSERT INTO ctest SELECT g, cashrange(g::money, (g+1)::money)::cashrange FROM generate_series(1, 1000) g; ANALYZE ctest; EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF, BUFFERS OFF, SUMMARY OFF) SELECT count(*) FROM ctest WHERE (a,b) = ANY (ARRAY[(1, '(1,2)'::cashrange), (2, '(3,4)'::cashrange)]); EXPLAIN (ANALYZE, COSTS OFF, TIMING OFF, BUFFERS OFF, SUMMARY OFF) SELECT count(*) FROM ctest WHERE (a,b) = ANY (ARRAY[ (1, '(1,2)'::cashrange), (2, '(2,3)'::cashrange), (3, '(3,4)'::cashrange), (4, '(4,5)'::cashrange), (5, '(5,6)'::cashrange), (6, '(6,7)'::cashrange), (7, '(7,8)'::cashrange), (8, '(8,9)'::cashrange), (9, '(9,10)'::cashrange) ]);