postgres.git / summary / log / commit / refs

commit    178ee1d858d89f6d86f42a84bd4b8014ddfa7245
Author:   Amit Langote <amitlan@postgresql.org>
Date:     Thu Oct 26 02:53:41 2023 +0000
First released in: 17.0, 16.1

    Prevent duplicate RTEPermissionInfo for plain-inheritance parents
    
    Currently, expand_single_inheritance_child() doesn't reset
    perminfoindex in a plain-inheritance parent's child RTE, because
    prior to 387f9ed0a0, the executor would use the first child RTE to
    locate the parent's RTEPermissionInfo.  That in turn causes
    add_rte_to_flat_rtable() to create an extra RTEPermissionInfo
    belonging to the parent's child RTE with the same content as the one
    belonging to the parent's original ("root") RTE.
    
    In 387f9ed0a0, we changed things so that the executor can now use the
    parent's "root" RTE for locating its RTEPermissionInfo instead of the
    child RTE, so the latter's perminfoindex need not be set anymore, so
    make it so.
    
    Reported-by: Tom Lane
    Discussion: https://postgr.es/m/839708.1698174464@sss.pgh.pa.us
    Backpatch-through: 16


src/backend/optimizer/util/inherit.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/backend/optimizer/util/inherit.c b/src/backend/optimizer/util/inherit.c index 94de855a227..00b65ca305b 100644 --- a/src/backend/optimizer/util/inherit.c +++ b/src/backend/optimizer/util/inherit.c @@ -494,13 +494,8 @@ expand_single_inheritance_child(PlannerInfo *root, RangeTblEntry *parentrte, childrte->inh = false; childrte->securityQuals = NIL; - /* - * No permission checking for the child RTE unless it's the parent - * relation in its child role, which only applies to traditional - * inheritance. - */ - if (childOID != parentOID) - childrte->perminfoindex = 0; + /* No permission checking for child RTEs. */ + childrte->perminfoindex = 0; /* Link not-yet-fully-filled child RTE into data structures */ parse->rtable = lappend(parse->rtable, childrte); [parent: d76606f077c3]