On Fri, Oct 14, 2022 at 5:24 PM Alvaro Herrera <alvhe...@alvh.no-ip.org> wrote:
> Actually, I hadn't realized that the originally submitted patch had the > test in postgres_fdw only, but we really want it to catch any FDW, so it > needs to be somewhere more general. The best place I found to put this > test is in make_modifytable ... I searched for some earlier place in the > planner to do it, but couldn't find anything. > > So what do people think about this? Good point. I agree that the test should be in a more general place. I wonder if we can make it earlier in grouping_planner() just before we add ModifyTablePath. --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -1772,6 +1772,17 @@ grouping_planner(PlannerInfo *root, double tuple_fraction) /* Build per-target-rel lists needed by ModifyTable */ resultRelations = lappend_int(resultRelations, resultRelation); + if (parse->commandType == CMD_MERGE && + this_result_rel->fdwroutine != NULL) + { + RangeTblEntry *rte = root->simple_rte_array[resultRelation]; + + ereport(ERROR, + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot execute MERGE on relation \"%s\"", + get_rel_name(rte->relid)), + errdetail_relkind_not_supported(rte->relkind)); + } Thanks Richard