On Thu, Jan 21, 2021 at 12:44 PM Greg Nancarrow <gregn4...@gmail.com> wrote: > > On Wed, Dec 23, 2020 at 1:45 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > > > On Wed, Dec 23, 2020 at 7:52 AM Hou, Zhijie <houzj.f...@cn.fujitsu.com> > > wrote: > > > > > > Hi > > > > > > > > I may be wrong, and if I miss sth in previous mails, please give me > > > > > some > > > > hints. > > > > > IMO, serial insertion with underlying parallel SELECT can be > > > > > considered for foreign table or temporary table, as the insertions > > > > > only > > > > happened in the leader process. > > > > > > > > > > > > > I don't think we support parallel scan for temporary tables. Can you > > > > please > > > > try once both of these operations without Insert being involved? If you > > > > are able to produce a parallel plan without Insert then we can see why > > > > it > > > > is not supported with Insert. > > > > > > Sorry, may be I did not express it clearly, I actually means the case > > > when insert's target(not in select part) table is temporary. > > > And you are right that parallel select is not enabled when temporary > > > table is in select part. > > > > > > > I think Select can be parallel for this case and we should support this > > case. > > > > So I think we're saying that if the target table is a foreign table or > temporary table, it can be regarded as PARALLEL_RESTRICTED, right? >
Yes. > i.e. code-wise: > > /* > - * We can't support table modification in parallel-mode if > it's a foreign > - * table/partition (no FDW API for supporting parallel access) or a > + * We can't support table modification in a parallel worker if it's a > + * foreign table/partition (no FDW API for supporting parallel > access) or a > * temporary table. > */ > if (rel->rd_rel->relkind == RELKIND_FOREIGN_TABLE || > RelationUsesLocalBuffers(rel)) > { > - table_close(rel, lockmode); > - context->max_hazard = PROPARALLEL_UNSAFE; > - return true; > + if (max_parallel_hazard_test(PROPARALLEL_RESTRICTED, context)) > + { > + table_close(rel, lockmode); > + return true; > + } > } > Yeah, these changes look correct to me. -- With Regards, Amit Kapila.