v1-0001-Prevent-duplicate-RTEPermissionInfo-for-plain-inh.patch

application/octet-stream

Filename: v1-0001-Prevent-duplicate-RTEPermissionInfo-for-plain-inh.patch
Type: application/octet-stream
Part: 0
Message: Re: AW: AW: BUG #18147: ERROR: invalid perminfoindex 0 in RTE with relid xxxxx

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 v1-0001
Subject: Prevent duplicate RTEPermissionInfo for plain-inheritance parents
File+
src/backend/optimizer/util/inherit.c 2 7
From ac81db0f6033184ad7ad18dc83ccdeba8c052cb7 Mon Sep 17 00:00:00 2001
From: Amit Langote <amitlan@postgresql.org>
Date: Wed, 25 Oct 2023 16:51:22 +0900
Subject: [PATCH v1] Prevent duplicate RTEPermissionInfo for plain-inheritance
 parents

Due to an oversight in a61b1f74823, expand_single_inheritance_child()
currently fails to reset perminfoindex in a plain-inheritance parent's
child RTE.  That in turn causes add_rte_to_flat_rtable() to create a
duplicate RTEPermissionInfo for the parent's child RTE.  Fix by making
expand_single_inheritance_child() always reset perminfoindex in the
child RTEs.

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