aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAmit Langote <amitlan@postgresql.org>2023-10-26 11:53:56 +0900
committerAmit Langote <amitlan@postgresql.org>2023-10-26 11:53:56 +0900
commit01575ad788e3d3e67b641d43802c8b7bf126a1a3 (patch)
tree35dbde92b231fecf639cc81352afa43008db0cc5 /src
parent29d0a77fa6606f9c01ba17311fc452dabd3f793d (diff)
downloadpostgresql-01575ad788e3d3e67b641d43802c8b7bf126a1a3.tar.gz
postgresql-01575ad788e3d3e67b641d43802c8b7bf126a1a3.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/util/inherit.c9
1 files 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);