Re: ExecRTCheckPerms() and many prunable partitions

From: Amit Langote <amitlangote09(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: Ian Lawrence Barwick <barwick(at)gmail(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, David Rowley <dgrowleyml(at)gmail(dot)com>, Greg Stark <stark(at)mit(dot)edu>, Julien Rouhaud <rjuju123(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: ExecRTCheckPerms() and many prunable partitions
Date: 2022-11-30 06:45:53
Message-ID: CA+HiwqGb0E_yxZcZxp7iQY8Jao65MQ5U+0NH7XfA+Gooxox5Pw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Nov 30, 2022 at 11:56 AM Amit Langote <amitlangote09(at)gmail(dot)com> wrote:
> On Wed, Nov 30, 2022 at 3:04 AM Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> > On 2022-Nov-29, Amit Langote wrote:
> >
> > > Maybe, we should have the following there so that the PlannedStmt's
> > > contents don't point into the Query?
> > >
> > > newperminfo = copyObject(perminfo);
> >
> > Hmm, I suppose if we want a separate RTEPermissionInfo node, we should
> > instead do GetRTEPermissionInfo(rte) followed by
> > AddRTEPermissionInfo(newrte) and avoid the somewhat cowboy-ish coding
> > there.
>
> OK, something like the attached?

Thinking more about the patch I sent, which has this:

+ /* Get the existing one from this query's rtepermlist. */
perminfo = GetRTEPermissionInfo(rtepermlist, newrte);
- glob->finalrtepermlist = lappend(glob->finalrtepermlist, perminfo);
- newrte->perminfoindex = list_length(glob->finalrtepermlist);
+
+ /*
+ * Add a new one to finalrtepermlist and copy the contents of the
+ * existing one into it. Note that AddRTEPermissionInfo() also
+ * updates newrte->perminfoindex to point to newperminfo in
+ * finalrtepermlist.
+ */
+ newrte->perminfoindex = 0; /* expected by AddRTEPermissionInfo() */
+ newperminfo = AddRTEPermissionInfo(&glob->finalrtepermlist, newrte);
+ memcpy(newperminfo, perminfo, sizeof(RTEPermissionInfo));

Note that simple memcpy'ing would lead to the selectedCols, etc.
bitmapsets being shared between the Query and the PlannedStmt, which
may be considered as not good. But maybe that's fine, because the
same is true for RangeTblEntry members that do have substructure such
as the various Alias fields that are not reset? Code paths that like
to keep a PlannedStmt to be decoupled from the corresponding Query,
such as plancache.c, do copy the former, so shared sub-structure in
the default case may be fine after all.

--
Thanks, Amit Langote
EDB: http://www.enterprisedb.com

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2022-11-30 06:50:25 Re: Perform streaming logical transactions by background workers and parallel apply
Previous Message Simon Riggs 2022-11-30 06:40:40 Re: Reducing power consumption on idle servers