RangeTblEntry.inh vs. RTE_SUBQUERY

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2024-02-23T14:34:56Z
Lists: pgsql-hackers
Various code comments say that the RangeTblEntry field inh may only be 
set for entries of kind RTE_RELATION.

For example

  *    inh is true for relation references that should be expanded to 
include
  *    inheritance children, if the rel has any.  This *must* be false for
  *    RTEs other than RTE_RELATION entries.

and various comments in other files.

(Confusingly, it is also listed under "Fields valid in all RTEs:", but 
that definitely seems wrong.)

I have been deploying some assertions to see if the claims in the 
RangeTblEntry comments are all correct, and I tripped over something.

The function pull_up_simple_union_all() in prepjointree.c sets ->inh to 
true for RTE_SUBQUERY entries:

     /*
      * Mark the parent as an append relation.
      */
     rte->inh = true;

Whatever this is doing appears to be some undocumented magic.  If I 
remove the line, then regression tests fail with plan differences, so it 
definitely seems to do something.

Is this something we should explain the RangeTblEntry comments?



Commits

  1. Fix description and grouping of RangeTblEntry.inh

  2. Improve field order in RangeTblEntry