Re: Removing unneeded self joins
Alena Rybakina <a.rybakina@postgrespro.ru>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Remove GUC_NOT_IN_SAMPLE from enable_self_join_elimination
- 717d0e8dd945 18.0 landed
-
Put enable_self_join_elimination into postgresql.conf.sample
- c2d329260cd8 18.0 landed
-
Get rid of ojrelid local variable in remove_rel_from_query()
- e167191dc146 18.0 landed
-
Implement Self-Join Elimination
- fc069a3a6319 18.0 cited
-
Revert: Remove useless self-joins
- d1d286d83c0e 17.0 landed
-
Replace lateral references to removed rels in subqueries
- 466979ef031a 17.0 landed
-
Replace relids in lateral subquery parse tree during SJE
- 489072ab7a9e 17.0 landed
-
Forbid SJE with result relation
- 8c441c082797 17.0 landed
-
Fix misuse of RelOptInfo.unique_for_rels cache by SJE
- 30b4955a4668 17.0 landed
-
Replace the relid in some missing fields during SJE
- a7928a57b9f0 17.0 landed
-
Revert 56-bit relfilenode change and follow-up commits.
- a448e49bcbe4 16.0 cited
-
Stabilize timetz test across DST transitions.
- 4a071afbd056 14.0 cited
-
Speed up finding EquivalenceClasses for a given set of rels
- 3373c7155350 13.0 cited
-
Fix mark-and-restore-skipping test case to not be a self-join.
- 24d08f3c0a1f 12.0 landed
Attachments
- self-join-removal.diff (text/x-patch) patch
Hi! Thank you for the work with this subject, I think it is really important. On 10.02.2025 22:58, Alexander Korotkov wrote: > Hi! > > On Mon, Feb 10, 2025 at 7:19 AM Andrei Lepikhov <lepihov@gmail.com> wrote: >> On 9/2/2025 18:41, Alexander Korotkov wrote: >>> Regarding adjust_relid_set() and replace_relid(). I think they are >>> now strictly equivalent, except for the case then old relid is given >>> and not found. In this case adjust_relid_set() returns the original >>> relids while replace_relid() returns a copy. The behavior of >>> adjust_relid_set() appears more desirable as we don't need extra >>> copying when no modification is done. So, I've replaced all >>> replace_relid() with adjust_relid_set(). >> Ok, I glanced into it, and it makes sense to merge these routines. >> I think the comment to adjust_relid_set() should be arranged, too. See >> the attachment for a short variant of such modification. >>> Also, I did some grammar correction to your new comment in tests. >> Thanks! > I've further revised adjust_relid_set() header comment. > > Looking back to the work done since previous attempt to commit this to > pg17, I can highlight following. > 1) We're now using more of existing infrastructure including > adjust_relid_set() and ChangeVarNodes(). The most of complexity is > still there though. > 2) We've checked few ways to further simplify this patch. But yet the > current way still feels to be best possible. > 3) For sure, several bugs were fixed. > > I think we could give it another chance for pg18 after some further > polishing (at least commit message still needs to be revised). Any > thoughts on this? Tom? > I didn't find any mistakes, I just have a refactoring remark. I think the part where we add non-redundant expressions with the binfo_candidates, jinfo_candidates check can be moved to a separate function, otherwise the code is very repetitive in this place. I did it and attached diff file -- Regards, Alena Rybakina Postgres Professional