On 21 December 2017 at 23:38, Amit Langote <langote_amit...@lab.ntt.co.jp> wrote: > Attached updated set of patches.
Looks like the new not equals code does not properly take into account a missing NULL partition. create table ta (a int not null) partition by list (a); create table ta1 partition of ta for values in(1,2); create table ta2 partition of ta for values in(3,4); explain select * from ta where a <> 1 and a <> 2; ERROR: negative bitmapset member not allowed -- Add null partition create table ta_null partition of ta for values in(null); explain select * from ta where a <> 1 and a <> 2; -- works now. QUERY PLAN ------------------------------------------------------------- Append (cost=0.00..48.25 rows=2525 width=4) -> Seq Scan on ta2 (cost=0.00..48.25 rows=2525 width=4) Filter: ((a <> 1) AND (a <> 2)) (3 rows) This code appears to be at fault: /* * Also, exclude the "null-only" partition, because strict clauses in * ne_clauses will not select any rows from it. */ if (count_partition_datums(relation, boundinfo->null_index) == 0) excluded_parts = bms_add_member(excluded_parts, boundinfo->null_index); -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services