diff --git a/src/backend/distributed/planner/merge_planner.c b/src/backend/distributed/planner/merge_planner.c index e1d917ca00d..6f39937941a 100644 --- a/src/backend/distributed/planner/merge_planner.c +++ b/src/backend/distributed/planner/merge_planner.c @@ -1583,7 +1583,7 @@ IsLocalTableModification(Oid targetRelationId, Query *query, uint64 shardId, return true; } - if (shardId == INVALID_SHARD_ID && ContainsOnlyLocalTables(rteProperties)) + if (shardId == INVALID_SHARD_ID && ContainsOnlyLocalOrReferenceTables(rteProperties)) { return true; } diff --git a/src/backend/distributed/planner/multi_router_planner.c b/src/backend/distributed/planner/multi_router_planner.c index afc7a767d19..08bb8047556 100644 --- a/src/backend/distributed/planner/multi_router_planner.c +++ b/src/backend/distributed/planner/multi_router_planner.c @@ -2556,13 +2556,15 @@ AllShardsColocated(List *relationShardList) /* - * ContainsOnlyLocalTables returns true if there is only - * local tables and not any distributed or reference table. + * ContainsOnlyLocalOrReferenceTables returns true if there are no distributed + * tables in the query. In other words, the query might reference only local + * tables and/or reference tables, but no fully distributed tables. */ bool -ContainsOnlyLocalTables(RTEListProperties *rteProperties) +ContainsOnlyLocalOrReferenceTables(RTEListProperties *rteProperties) { - return !rteProperties->hasDistributedTable; + // If hasDistributedTable is false, then all tables are either local or reference. + return !rteProperties->hasDistributedTable; } diff --git a/src/include/distributed/multi_router_planner.h b/src/include/distributed/multi_router_planner.h index ae75ee63147..44be2736e19 100644 --- a/src/include/distributed/multi_router_planner.h +++ b/src/include/distributed/multi_router_planner.h @@ -118,7 +118,7 @@ extern bool HasDangerousJoinUsing(List *rtableList, Node *jtnode); extern Job * RouterJob(Query *originalQuery, PlannerRestrictionContext *plannerRestrictionContext, DeferredErrorMessage **planningError); -extern bool ContainsOnlyLocalTables(RTEListProperties *rteProperties); +extern bool ContainsOnlyLocalOrReferenceTables(RTEListProperties *rteProperties); extern RangeTblEntry * ExtractSourceResultRangeTableEntry(Query *query); #endif /* MULTI_ROUTER_PLANNER_H */ diff --git a/src/test/regress/multi_schedule b/src/test/regress/multi_schedule index ae9d9ac6ccd..ad389e02c44 100644 --- a/src/test/regress/multi_schedule +++ b/src/test/regress/multi_schedule @@ -103,7 +103,7 @@ test: multi_dropped_column_aliases foreign_key_restriction_enforcement test: binary_protocol test: alter_table_set_access_method test: alter_distributed_table -test: issue_5248 issue_5099 issue_5763 issue_6543 issue_6758 issue_7477 issue_7705 +test: issue_5248 issue_5099 issue_5763 issue_6543 issue_6758 issue_7477 issue_7705 issue_7891 test: object_propagation_debug test: undistribute_table test: run_command_on_all_nodes