I came across an assert failure in _bt_preprocess_array_keys regarding
the sanity check on the datatype of the array elements. It can be
reproduced with the query below.
create table t (c int4range);
create unique index on t (c);
select * from t where c in ('(1, 100]'::int4range, '(50, 300]'::int4range);
It fails on this Assert:
+ elemtype = cur->sk_subtype;
+ if (elemtype == InvalidOid)
+ elemtype = rel->rd_opcintype[cur->sk_attno - 1];
+ Assert(elemtype == ARR_ELEMTYPE(arrayval));
... which was introduced in 5bf748b86b.
I didn't spend much time digging into it, but I wonder if this Assert is
sensible. I noticed that before commit 5bf748b86b, the two datatypes
were not equal to each other either (anyrange vs. int4range).
Thanks
Richard