v2-0001-Prevent-duplicate-RTEPermissionInfo-for-plain-inh.patch
application/octet-stream
Filename: v2-0001-Prevent-duplicate-RTEPermissionInfo-for-plain-inh.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0001
Subject: Prevent duplicate RTEPermissionInfo for plain-inheritance parents
| File | + | − |
|---|---|---|
| src/backend/optimizer/util/inherit.c | 2 | 7 |
From ba11e2762791360316e232a9d3194931779c55b4 Mon Sep 17 00:00:00 2001
From: Amit Langote <amitlan@postgresql.org>
Date: Thu, 26 Oct 2023 11:25:10 +0900
Subject: [PATCH v2] 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 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, so the child
RTE'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 94de855a22..00b65ca305 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);
--
2.35.3