Hi,
SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com> 于2026年4月25日周六 15:44写道:
>
> Hi hackers,
>
> I found that remove_self_join_rel() in analyzejoins.c discards the
> return values of two adjust_relid_set() calls when updating
> root->all_result_relids and root->leaf_result_relids:
>
> adjust_relid_set(root->all_result_relids, toRemove->relid, toKeep->relid);
> adjust_relid_set(root->leaf_result_relids, toRemove->relid, toKeep->relid);
>
> adjust_relid_set() does not modify its input in-place. When it finds
> the old relid in the set, it calls bms_copy() to create a new
> Bitmapset, performs the substitution on the copy, and returns the new
> pointer. Without capturing the return value, the original sets are
> never updated. Every other call site in the file analyzejoins.c correctly
> assigns the return value.
>
> I am not able to craft a query to show it as a problem.
> For the current release, these two lines appears to be a no-op?
>
> Attached a patch to assign the returned values.
The topic in [1] seems to be the same issue as your report.
You can take a look at [1] to double-check.
[1] https://www.postgresql.org/message-id/CAMbWs49fYQcqJfJ_Gtn8r1GFNoYtb1%3D2AUab4ieuqY4Zid9ocQ%40mail.gmail.com
(Sorry for not adding pgsql-hackers mail in the last email)
--
Thanks,
Tender Wang