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
On 13.02.2025 02:00, Alexander Korotkov wrote: > Thank you. I've integrated that into a patch. However, I've to > change keep_rinfo_list to be passed by pointer to > add_non_redundant_clauses(), because it might be changed in > distribute_restrictinfo_to_rels(). Without that there is a case of > duplicated clause in regression tests. > > I've changed 'inner' and 'outer' vise versa in > remove_self_joins_one_group() for better readability (I believe that > was discussed upthread but lost). Also, I did a round of improvement > for comments and commit message. On 15.02.2025 12:19, Alexander Korotkov wrote: > On Thu, Feb 13, 2025 at 1:00 AM Alexander Korotkov<aekorotkov@gmail.com> wrote: >> On Tue, Feb 11, 2025 at 5:31 PM Alena Rybakina >> <a.rybakina@postgrespro.ru> wrote: >>> 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 >> Thank you. I've integrated that into a patch. However, I've to >> change keep_rinfo_list to be passed by pointer to >> add_non_redundant_clauses(), because it might be changed in >> distribute_restrictinfo_to_rels(). Without that there is a case of >> duplicated clause in regression tests. >> >> I've changed 'inner' and 'outer' vise versa in >> remove_self_joins_one_group() for better readability (I believe that >> was discussed upthread but lost). Also, I did a round of improvement >> for comments and commit message. > I've corrected some spelling error reported by Alexander Lakhin > privately to me. Also, I've revised comments around ChangeVarNodes() > and ChangeVarNodesExtended(). I'm going to continue nitpicking this > patch during next couple days then push it if no objections. I agree with your corrections and for me patch looks good. -- Regards, Alena Rybakina Postgres Professional