From 2d1390023058f9cff2957dfc5979c7e8bcff29b9 Mon Sep 17 00:00:00 2001 From: Nils Dijk Date: Thu, 19 Jul 2018 15:59:48 +0200 Subject: [PATCH] error on unsupported changing of distirbution column in ON CONFLICT for INSERT ... SELECT --- .../distributed/planner/insert_select_planner.c | 8 ++++++++ .../regress/expected/multi_insert_select.out | 16 ++++++++++++++++ src/test/regress/sql/multi_insert_select.sql | 16 ++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/src/backend/distributed/planner/insert_select_planner.c b/src/backend/distributed/planner/insert_select_planner.c index 6f6343e16..5ec36b844 100644 --- a/src/backend/distributed/planner/insert_select_planner.c +++ b/src/backend/distributed/planner/insert_select_planner.c @@ -176,6 +176,14 @@ CreateInsertSelectPlan(Query *originalQuery, PlannerRestrictionContext *plannerRestrictionContext) { DistributedPlan *distributedPlan = NULL; + DeferredErrorMessage *deferredError = NULL; + + deferredError = ErrorIfOnConflictNotSupported(originalQuery); + if (deferredError != NULL) + { + /* raising the error as there is no possible solution for the unsupported on conflict statements */ + RaiseDeferredError(deferredError, ERROR); + } distributedPlan = CreateDistributedInsertSelectPlan(originalQuery, plannerRestrictionContext); diff --git a/src/test/regress/expected/multi_insert_select.out b/src/test/regress/expected/multi_insert_select.out index c15d7067a..91a1a2966 100644 --- a/src/test/regress/expected/multi_insert_select.out +++ b/src/test/regress/expected/multi_insert_select.out @@ -2735,6 +2735,22 @@ EXECUTE prepared_recursive_insert_select; EXECUTE prepared_recursive_insert_select; EXECUTE prepared_recursive_insert_select; ROLLBACK; +-- upsert with on conflict update distribution column is unsupported +INSERT INTO agg_events AS ae + ( + user_id, + value_1_agg, + agg_time + ) +SELECT user_id, + value_1, + time +FROM raw_events_first +ON conflict (user_id, value_1_agg) +DO UPDATE + SET user_id = 42 +RETURNING user_id, value_1_agg; +ERROR: modifying the partition value of rows is not allowed -- wrap in a transaction to improve performance BEGIN; DROP TABLE coerce_events; diff --git a/src/test/regress/sql/multi_insert_select.sql b/src/test/regress/sql/multi_insert_select.sql index cbeb08fe6..5c4bf4930 100644 --- a/src/test/regress/sql/multi_insert_select.sql +++ b/src/test/regress/sql/multi_insert_select.sql @@ -2104,6 +2104,22 @@ EXECUTE prepared_recursive_insert_select; EXECUTE prepared_recursive_insert_select; ROLLBACK; +-- upsert with on conflict update distribution column is unsupported +INSERT INTO agg_events AS ae + ( + user_id, + value_1_agg, + agg_time + ) +SELECT user_id, + value_1, + time +FROM raw_events_first +ON conflict (user_id, value_1_agg) +DO UPDATE + SET user_id = 42 +RETURNING user_id, value_1_agg; + -- wrap in a transaction to improve performance BEGIN; DROP TABLE coerce_events;