Hi, When developing the reloption patch, I noticed some issues in the patch.
1). > - Reduce Insert parallel-safety checks required for some SQL, by noting > that the subquery must operate on a relation (check for RTE_RELATION in > subquery range-table) + foreach(lcSub, rte->subquery->rtable) + { + rteSub = lfirst_node(RangeTblEntry, lcSub); + if (rteSub->rtekind == RTE_RELATION) + { + hasSubQueryOnRelation = true; + break; + } + } It seems we can not only search RTE_RELATION in rtable, because RTE_RELATION may exist in other place like: --- --** explain insert into target select (select * from test); Subplan's subplan --** with cte as (select * from test) insert into target select * from cte; In query's ctelist. --- May be we should use a walker function [1] to search the subquery and ctelist. 2). +-- +-- Test INSERT into temporary table with underlying query. +-- (should not use a parallel plan) +-- May be the comment here need some change since we currently support parallel plan for temp table. 3) Do you think we can add a testcase for foreign-table ? To test parallel query with serial insert on foreign table. [1] static bool relation_walker(Node *node) { if (node == NULL) return false; else if (IsA(node, RangeTblEntry)) { RangeTblEntry *rte = (RangeTblEntry *) node; if (rte->rtekind == RTE_RELATION) return true; return false; } else if (IsA(node, Query)) { Query *query = (Query *) node; /* Recurse into subselects */ return query_tree_walker(query, relation_walker, NULL, QTW_EXAMINE_RTES_BEFORE); } /* Recurse to check arguments */ return expression_tree_walker(node, relation_walker, NULL); } Best regards, houzj