Thread

Commits

  1. Fix buggy recursion in flatten_rtes_walker().

  1. ERROR: permission info at index 1 ....

    Tender Wang <tndrwang@gmail.com> — 2023-02-13T14:32:32Z

    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
    
  2. Re: ERROR: permission info at index 1 ....

    Tom Lane <tgl@sss.pgh.pa.us> — 2023-02-13T17:21:57Z

    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!
    
    			regards, tom lane
    
    [1] https://www.postgresql.org/message-id/20230212233711.GA1316%40telsasoft.com
    
    
    
    
  3. Re: ERROR: permission info at index 1 ....

    Alvaro Herrera <alvherre@alvh.no-ip.org> — 2023-02-13T18:33:07Z

    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/