On Mon, 2025-01-27 at 18:08 +0000, Jim Vanns wrote: > If I have a function that is marked 'stable parallel safe' and returns > a table, can a calling function or procedure (marked volatile parallel > unsafe) still take advantage of the parallel workers from the first > function - as the data source. I.e. > > func_a(); // selects, returns table, parallel safe > func_b() { > insert into foo > select * from func_a(); // Will func_a still execute parallel > workers to fetch the data? > } > > Or even if func_b() uses 'create temporary table as select * from > func_a()' and then insert? > > I ask because when I simply call func_a() from a psql shell, I see the > parallel workers run and everything is nice and swift. But when called > from a data-modifying function like func_b(), no workers are spawned > :( Even from the read-part of the code. > > Are there differences in functions vs. stored procedures that might > affect the behaviour of the planner to disregard workers? See https://www.postgresql.org/docs/current/when-can-parallel-query-be-used.html The problem here is the INSERT. Data modifying statements won't use parallel query. There are exceptions: CREATE TABLE ... AS SELECT ... should be able to use parallel query. Yours, Laurenz Albe