Thread
Commits
-
Remove overzealous array element type assertion.
- eff6a757fde3 17.0 landed
-
Enhance nbtree ScalarArrayOp execution.
- 5bf748b86bc6 17.0 cited
-
Assert failure in _bt_preprocess_array_keys
Richard Guo <guofenglinux@gmail.com> — 2024-04-22T02:36:13Z
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 -
Re: Assert failure in _bt_preprocess_array_keys
Peter Geoghegan <pg@bowt.ie> — 2024-04-22T02:52:16Z
On Sun, Apr 21, 2024 at 10:36 PM Richard Guo <guofenglinux@gmail.com> wrote: > 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). The assertion is wrong. It is testing behavior that's much older than commit 5bf748b86b, though. We can just get rid of it, since all of the information that we'll actually apply when preprocessing scan keys comes from the operator class. Pushed a fix removing the assertion just now. Thanks for the report. -- Peter Geoghegan
-
Re: Assert failure in _bt_preprocess_array_keys
Richard Guo <guofenglinux@gmail.com> — 2024-04-22T06:22:25Z
On Mon, Apr 22, 2024 at 10:52 AM Peter Geoghegan <pg@bowt.ie> wrote: > On Sun, Apr 21, 2024 at 10:36 PM Richard Guo <guofenglinux@gmail.com> > wrote: > > 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). > > The assertion is wrong. It is testing behavior that's much older than > commit 5bf748b86b, though. We can just get rid of it, since all of the > information that we'll actually apply when preprocessing scan keys > comes from the operator class. > > Pushed a fix removing the assertion just now. Thanks for the report. That's so quick. Thank you for the prompt fix. Thanks Richard