BTW, why is it that it seems to prefer to remove the first of the two self-joined rels, rather than the second? That seems jarringly bizarre.
Hmm, I'm not sure either. Alexander and Andrei, could you please share your insights?
BTW, while reading the codes, I noticed this commit of remove_self_joins_recurse.
* ... To avoid complexity, limit the max power of this set by a GUC.
But where is the GUC? I guess that it refers to self_join_search_limit, which has been removed during development.
So we should revise this commit to at least remove any mention of the GUC. Maybe it'd better to add a new commit explaining why we are not concerned about cases where the number of self joins is too large.