Hi,
On 2022-11-21 12:52:01 -0500, Robert Haas wrote:
> On Mon, Nov 21, 2022 at 12:35 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > I wrote:
> > > Andres Freund <andres@anarazel.de> writes:
> > >> Looks like a chunk of the buildfarm doesn't like this - presumably because
> > >> they use force_parallel_mode = regress. Seems ok to just force that to off in
> > >> this test?
> >
> > > Ugh ... didn't occur to me to try that. I'll take a look.
> >
> > Hmm, so the problem is:
> >
> > SELECT octet_length(get_raw_page('test1', 'main', 0)) AS main_0;
> > ERROR: cannot access temporary tables during a parallel operation
> >
> > Why in the world is get_raw_page() marked as parallel safe?
> > It clearly isn't, given this restriction.
>
> I suspect that restriction was overlooked when evaluating the marking
> of this function.
It's somewhat sad to add this restriction - I've used get_raw_page() (+
other functions) to scan a whole database for a bug. IIRC that actually
did end up using parallelism, albeit likely not very efficiently.
Don't really have a better idea though.
It may be worth inventing a framework where a function could analyze its
arguments (presumably via prosupport) to determine the degree of
parallel safety, but this doesn't seem sufficient reason...
Greetings
Andres Freund