Re: Assert failure on 'list_member_ptr(rel->joininfo, restrictinfo)'
Richard Guo <guofenglinux@gmail.com>
From: Richard Guo <guofenglinux@gmail.com>
To: Alexander Korotkov <aekorotkov@gmail.com>
Cc: Andres Freund <andres@anarazel.de>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2023-11-23T02:33:46Z
Lists: pgsql-hackers
Attachments
- v2-0001-Fix-how-SJE-replaces-join-clauses.patch (application/octet-stream) patch v2-0001
On Sun, Nov 19, 2023 at 9:17 AM Alexander Korotkov <aekorotkov@gmail.com> wrote: > It's here. New REALLOCATE_BITMAPSETS forces bitmapset reallocation on > each modification. +1 to the idea of introducing a reallocation mode to Bitmapset. > I had the feeling of falling into a rabbit hole while debugging all > the cases of failure with this new option. With the second patch > regressions tests pass. It seems to me that we have always had situations where we share the same pointer to a Bitmapset structure across different places. I do not think this is a problem as long as we do not modify the Bitmapsets in a way that requires reallocation or impact the locations sharing the same pointer. So I'm wondering, instead of attempting to avoid sharing pointer to Bitmapset in all locations that have problems, can we simply bms_copy the original Bitmapset within replace_relid() before making any modifications, as I proposed previously? Of course, as Andres pointed out, we need to do so also for the "Delete relid without substitution" path. Please see the attached. Thanks Richard
Commits
-
Add asserts to bimapset manipulation functions
- 71a3e8c43ba8 17.0 landed
-
Make replace_relid() leave argument unmodified
- e0477837ce49 17.0 landed
-
REALLOCATE_BITMAPSETS manual compile-time option
- 7d58f2342bd3 17.0 landed