ERROR: permission info at index 1 ....

Started by tender wangalmost 3 years ago3 messages
#1tender wang
tndrwang@gmail.com

Hi hackers,
After a61b1f74823c commit, below query reports error:

create table perm_test1(a int);
create table perm_test2(b int);
select subq.c0
from (select (select a from perm_test1 order by a limit 1) as c0, b as c1
from perm_test2 where false order by c0, c1) as subq where false;
ERROR: permission info at index 1 (with relid=16457) does not match
provided RTE (with relid=16460)

Below codes can fix this:

--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -512,11 +512,16 @@ flatten_rtes_walker(Node *node,
flatten_rtes_walker_context *cxt)
                 * Recurse into subselects.  Must update cxt->query to this
query so
                 * that the rtable and rteperminfos correspond with each
other.
                 */
+               Query *current_query = cxt->query;
+               bool result;
+
                cxt->query = (Query *) node;
-               return query_tree_walker((Query *) node,
+               result = query_tree_walker((Query *) node,

flatten_rtes_walker,
(void *)
cxt,

 QTW_EXAMINE_RTES_BEFORE);
+               cxt->query = current_query;
+               return result;
        }

regards, tender wang

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: tender wang (#1)
Re: ERROR: permission info at index 1 ....

tender wang <tndrwang@gmail.com> writes:

After a61b1f74823c commit, below query reports error:
create table perm_test1(a int);
create table perm_test2(b int);
select subq.c0
from (select (select a from perm_test1 order by a limit 1) as c0, b as c1
from perm_test2 where false order by c0, c1) as subq where false;
ERROR: permission info at index 1 (with relid=16457) does not match
provided RTE (with relid=16460)

Yeah, this was also reported by Justin Pryzby [1]/messages/by-id/20230212233711.GA1316@telsasoft.com.

Below codes can fix this:

Right you are. Pushed, thanks!

regards, tom lane

[1]: /messages/by-id/20230212233711.GA1316@telsasoft.com

#3Alvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Tom Lane (#2)
Re: ERROR: permission info at index 1 ....

On 2023-Feb-13, Tom Lane wrote:

tender wang <tndrwang@gmail.com> writes:

After a61b1f74823c commit, below query reports error:
create table perm_test1(a int);
create table perm_test2(b int);
select subq.c0
from (select (select a from perm_test1 order by a limit 1) as c0, b as c1
from perm_test2 where false order by c0, c1) as subq where false;
ERROR: permission info at index 1 (with relid=16457) does not match
provided RTE (with relid=16460)

Yeah, this was also reported by Justin Pryzby [1].

Below codes can fix this:

Right you are. Pushed, thanks!

Thank you both!

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/