Fix join removal logic to clean up sub-RestrictInfos of OR clauses.

Tom Lane <tgl@sss.pgh.pa.us>

Commit: 44e56baa80ff5fba150897308c8f25aa2251b16c
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: 2023-02-10T19:52:36Z
Releases: 16.0
Fix join removal logic to clean up sub-RestrictInfos of OR clauses.

analyzejoins.c took care to clean out removed relids from the
clause_relids and required_relids of RestrictInfos associated with
the doomed rel ... but it paid no attention to the fact that if such a
RestrictInfo contains an OR clause, there will be sub-RestrictInfos
containing similar fields.

I'm more than a bit surprised that this oversight hasn't caused
visible problems before.  In any case, it's certainly broken now,
so add logic to clean out the sub-RestrictInfos recursively.
We might need to back-patch this someday.

Per bug #17786 from Robins Tharakan.

Discussion: https://postgr.es/m/17786-f1ea7fbdab97daec@postgresql.org

Files

Discussion