From f7d61df201f5295634865dbb3a3974bbd69d17fb Mon Sep 17 00:00:00 2001 From: Richard Guo Date: Wed, 10 Apr 2024 19:25:11 +0800 Subject: [PATCH v1] Revise some error messages in split partition code --- src/backend/partitioning/partbounds.c | 4 ++-- src/test/regress/expected/partition_merge.out | 6 ++--- src/test/regress/expected/partition_split.out | 22 +++++++++---------- src/test/regress/sql/partition_merge.sql | 6 ++--- src/test/regress/sql/partition_split.sql | 16 +++++++------- 5 files changed, 25 insertions(+), 29 deletions(-) diff --git a/src/backend/partitioning/partbounds.c b/src/backend/partitioning/partbounds.c index c0c49b0a0b..ef4f32a78b 100644 --- a/src/backend/partitioning/partbounds.c +++ b/src/backend/partitioning/partbounds.c @@ -5498,7 +5498,7 @@ check_parent_values_in_new_partitions(Relation parent, ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), - errmsg("new partitions not have value %s but split partition has", + errmsg("new partitions do not have value %s but split partition does", searchNull ? "NULL" : get_list_partvalue_string(notFoundVal)))); } } @@ -5645,7 +5645,7 @@ check_partitions_for_split(Relation parent, { ereport(ERROR, (errcode(ERRCODE_INVALID_OBJECT_DEFINITION), - errmsg("any partition in the list should be DEFAULT because split partition is DEFAULT")), + errmsg("all partitions in the list should be DEFAULT because split partition is DEFAULT")), parser_errposition(pstate, ((SinglePartitionSpec *) linitial(partlist))->name->location)); } else if (!isSplitPartDefault && (default_index >= 0) && OidIsValid(defaultPartOid)) diff --git a/src/test/regress/expected/partition_merge.out b/src/test/regress/expected/partition_merge.out index 60eacf6bf3..1a5e623eb3 100644 --- a/src/test/regress/expected/partition_merge.out +++ b/src/test/regress/expected/partition_merge.out @@ -28,12 +28,10 @@ LINE 1: ...e MERGE PARTITIONS (sales_feb2022, sales_mar2022, sales_feb2... -- ERROR: "sales_apr2022" is not a table ALTER TABLE sales_range MERGE PARTITIONS (sales_feb2022, sales_mar2022, sales_apr2022) INTO sales_feb_mar_apr2022; ERROR: "sales_apr2022" is not a table --- ERROR: invalid partitions order, partition "sales_mar2022" can not be merged --- (space between sections sales_jan2022 and sales_mar2022) +-- ERROR: lower bound of partition "sales_mar2022" conflicts with upper bound of previous partition "sales_jan2022" ALTER TABLE sales_range MERGE PARTITIONS (sales_jan2022, sales_mar2022) INTO sales_jan_mar2022; ERROR: lower bound of partition "sales_mar2022" conflicts with upper bound of previous partition "sales_jan2022" --- ERROR: invalid partitions order, partition "sales_jan2022" can not be merged --- (space between sections sales_dec2021 and sales_jan2022) +-- ERROR: lower bound of partition "sales_jan2022" conflicts with upper bound of previous partition "sales_dec2021" ALTER TABLE sales_range MERGE PARTITIONS (sales_dec2021, sales_jan2022, sales_feb2022) INTO sales_dec_jan_feb2022; ERROR: lower bound of partition "sales_jan2022" conflicts with upper bound of previous partition "sales_dec2021" -- NO ERROR: test for custom partitions order diff --git a/src/test/regress/expected/partition_split.out b/src/test/regress/expected/partition_split.out index 26a0d09969..5057c83136 100644 --- a/src/test/regress/expected/partition_split.out +++ b/src/test/regress/expected/partition_split.out @@ -86,7 +86,7 @@ ALTER TABLE sales_range SPLIT PARTITION sales_feb_mar_apr2022 INTO ERROR: upper bound of partition "sales_apr2022" is greater than upper bound of split partition LINE 4: ... sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-06-0... ^ --- ERROR: lower bound of partition "sales_mar2022" is not equals to upper bound of previous partition +-- ERROR: lower bound of partition "sales_mar2022" conflicts with upper bound of previous partition "sales_feb2022" ALTER TABLE sales_range SPLIT PARTITION sales_feb_mar_apr2022 INTO (PARTITION sales_feb2022 FOR VALUES FROM ('2022-02-01') TO ('2022-03-01'), PARTITION sales_mar2022 FOR VALUES FROM ('2022-02-01') TO ('2022-04-01'), @@ -96,7 +96,7 @@ LINE 3: PARTITION sales_mar2022 FOR VALUES FROM ('2022-02-01') TO... ^ -- Tests for spaces between partitions, them should be executed without DEFAULT partition ALTER TABLE sales_range DETACH PARTITION sales_others; --- ERROR: lower bound of partition "sales_feb2022" is not equals to lower bound of split partition +-- ERROR: lower bound of partition "sales_feb2022" is not equal to lower bound of split partition ALTER TABLE sales_range SPLIT PARTITION sales_feb_mar_apr2022 INTO (PARTITION sales_feb2022 FOR VALUES FROM ('2022-02-02') TO ('2022-03-01'), PARTITION sales_mar2022 FOR VALUES FROM ('2022-03-01') TO ('2022-04-01'), @@ -547,12 +547,12 @@ ALTER TABLE sales_range SPLIT PARTITION sales_others INTO ERROR: lower bound of partition "sales_error" conflicts with upper bound of previous partition "sales_dec2022" LINE 3: PARTITION sales_error FOR VALUES FROM (20211201) TO (2022... ^ --- ERROR: any partition in the list should be DEFAULT because split partition is DEFAULT +-- ERROR: all partitions in the list should be DEFAULT because split partition is DEFAULT ALTER TABLE sales_range SPLIT PARTITION sales_others INTO (PARTITION sales_dec2022 FOR VALUES FROM (20211201) TO (20220101), PARTITION sales_jan2022 FOR VALUES FROM (20220101) TO (20220201), PARTITION sales_feb2022 FOR VALUES FROM (20220201) TO (20220301)); -ERROR: any partition in the list should be DEFAULT because split partition is DEFAULT +ERROR: all partitions in the list should be DEFAULT because split partition is DEFAULT LINE 2: (PARTITION sales_dec2022 FOR VALUES FROM (20211201) TO (20... ^ -- no error: bounds of sales_noerror between sales_dec2022 and sales_feb2022 @@ -564,7 +564,7 @@ ALTER TABLE sales_range SPLIT PARTITION sales_others INTO DROP TABLE sales_range; CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date INT) PARTITION BY RANGE (sales_date); CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; --- no error: bounds of sales_noerror equals to lower and upper bounds of sales_dec2022 and sales_feb2022 +-- no error: bounds of sales_noerror are equal to lower and upper bounds of sales_dec2022 and sales_feb2022 ALTER TABLE sales_range SPLIT PARTITION sales_others INTO (PARTITION sales_dec2022 FOR VALUES FROM (20211201) TO (20220101), PARTITION sales_noerror FOR VALUES FROM (20210101) TO (20210201), @@ -616,7 +616,7 @@ SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conre FOREIGN KEY (salesman_id) REFERENCES salesmans(salesman_id) | sales_range_salesman_id_fkey | {1} (2 rows) --- ERROR: new row for relation "sales_mar2022" violates check constraint "sales_range_salesman_id_check" +-- ERROR: new row for relation "sales_mar2022" violates check constraint "sales_range_sales_amount_check" INSERT INTO sales_range VALUES (1, 0, '2022-03-11'); ERROR: new row for relation "sales_mar2022" violates check constraint "sales_range_sales_amount_check" DETAIL: Failing row contains (1, 0, 03-11-2022). @@ -1036,7 +1036,7 @@ PARTITION BY LIST (sales_state); CREATE TABLE sales_nord PARTITION OF sales_list FOR VALUES IN ('Oslo', 'St. Petersburg', 'Helsinki'); CREATE TABLE sales_all PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Lisbon', 'New York', 'Madrid', 'Bejing', 'Berlin', 'Delhi', 'Kyiv', 'Vladivostok'); CREATE TABLE sales_others PARTITION OF sales_list DEFAULT; --- ERROR: partition "sales_east" would overlap partition "sales_nord" +-- ERROR: new partition "sales_east" would overlap with another (not split) partition "sales_nord" ALTER TABLE sales_list SPLIT PARTITION sales_all INTO (PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'), PARTITION sales_east FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok', 'Helsinki'), @@ -1075,18 +1075,18 @@ CREATE TABLE sales_list PARTITION BY LIST (sales_state); CREATE TABLE sales_nord PARTITION OF sales_list FOR VALUES IN ('Helsinki', 'St. Petersburg', 'Oslo'); CREATE TABLE sales_all PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Lisbon', 'New York', 'Madrid', 'Bejing', 'Berlin', 'Delhi', 'Kyiv', 'Vladivostok', NULL); --- ERROR: new partitions not have value NULL but split partition has +-- ERROR: new partitions do not have value NULL but split partition does ALTER TABLE sales_list SPLIT PARTITION sales_all INTO (PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'), PARTITION sales_east FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok'), PARTITION sales_central FOR VALUES IN ('Warsaw', 'Berlin', 'Kyiv')); -ERROR: new partitions not have value NULL but split partition has --- ERROR: new partitions not have value 'Kyiv' but split partition has +ERROR: new partitions do not have value NULL but split partition does +-- ERROR: new partitions do not have value 'Kyiv' but split partition does ALTER TABLE sales_list SPLIT PARTITION sales_all INTO (PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'), PARTITION sales_east FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok'), PARTITION sales_central FOR VALUES IN ('Warsaw', 'Berlin', NULL)); -ERROR: new partitions not have value 'Kyiv' but split partition has +ERROR: new partitions do not have value 'Kyiv' but split partition does DROP TABLE sales_list; -- -- Test: BY LIST partitioning, SPLIT PARTITION with data diff --git a/src/test/regress/sql/partition_merge.sql b/src/test/regress/sql/partition_merge.sql index 9afed70365..dc20cd687e 100644 --- a/src/test/regress/sql/partition_merge.sql +++ b/src/test/regress/sql/partition_merge.sql @@ -30,11 +30,9 @@ CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; ALTER TABLE sales_range MERGE PARTITIONS (sales_feb2022, sales_mar2022, sales_feb2022) INTO sales_feb_mar_apr2022; -- ERROR: "sales_apr2022" is not a table ALTER TABLE sales_range MERGE PARTITIONS (sales_feb2022, sales_mar2022, sales_apr2022) INTO sales_feb_mar_apr2022; --- ERROR: invalid partitions order, partition "sales_mar2022" can not be merged --- (space between sections sales_jan2022 and sales_mar2022) +-- ERROR: lower bound of partition "sales_mar2022" conflicts with upper bound of previous partition "sales_jan2022" ALTER TABLE sales_range MERGE PARTITIONS (sales_jan2022, sales_mar2022) INTO sales_jan_mar2022; --- ERROR: invalid partitions order, partition "sales_jan2022" can not be merged --- (space between sections sales_dec2021 and sales_jan2022) +-- ERROR: lower bound of partition "sales_jan2022" conflicts with upper bound of previous partition "sales_dec2021" ALTER TABLE sales_range MERGE PARTITIONS (sales_dec2021, sales_jan2022, sales_feb2022) INTO sales_dec_jan_feb2022; -- NO ERROR: test for custom partitions order diff --git a/src/test/regress/sql/partition_split.sql b/src/test/regress/sql/partition_split.sql index 625b01ddd1..d7f6a6bf59 100644 --- a/src/test/regress/sql/partition_split.sql +++ b/src/test/regress/sql/partition_split.sql @@ -77,7 +77,7 @@ ALTER TABLE sales_range SPLIT PARTITION sales_feb_mar_apr2022 INTO PARTITION sales_mar2022 FOR VALUES FROM ('2022-03-01') TO ('2022-04-01'), PARTITION sales_apr2022 FOR VALUES FROM ('2022-04-01') TO ('2022-06-01')); --- ERROR: lower bound of partition "sales_mar2022" is not equals to upper bound of previous partition +-- ERROR: lower bound of partition "sales_mar2022" conflicts with upper bound of previous partition "sales_feb2022" ALTER TABLE sales_range SPLIT PARTITION sales_feb_mar_apr2022 INTO (PARTITION sales_feb2022 FOR VALUES FROM ('2022-02-01') TO ('2022-03-01'), PARTITION sales_mar2022 FOR VALUES FROM ('2022-02-01') TO ('2022-04-01'), @@ -86,7 +86,7 @@ ALTER TABLE sales_range SPLIT PARTITION sales_feb_mar_apr2022 INTO -- Tests for spaces between partitions, them should be executed without DEFAULT partition ALTER TABLE sales_range DETACH PARTITION sales_others; --- ERROR: lower bound of partition "sales_feb2022" is not equals to lower bound of split partition +-- ERROR: lower bound of partition "sales_feb2022" is not equal to lower bound of split partition ALTER TABLE sales_range SPLIT PARTITION sales_feb_mar_apr2022 INTO (PARTITION sales_feb2022 FOR VALUES FROM ('2022-02-02') TO ('2022-03-01'), PARTITION sales_mar2022 FOR VALUES FROM ('2022-03-01') TO ('2022-04-01'), @@ -307,7 +307,7 @@ ALTER TABLE sales_range SPLIT PARTITION sales_others INTO PARTITION sales_feb2022 FOR VALUES FROM (20220201) TO (20220301), PARTITION sales_others DEFAULT); --- ERROR: any partition in the list should be DEFAULT because split partition is DEFAULT +-- ERROR: all partitions in the list should be DEFAULT because split partition is DEFAULT ALTER TABLE sales_range SPLIT PARTITION sales_others INTO (PARTITION sales_dec2022 FOR VALUES FROM (20211201) TO (20220101), PARTITION sales_jan2022 FOR VALUES FROM (20220101) TO (20220201), @@ -325,7 +325,7 @@ DROP TABLE sales_range; CREATE TABLE sales_range (salesman_id INT, salesman_name VARCHAR(30), sales_amount INT, sales_date INT) PARTITION BY RANGE (sales_date); CREATE TABLE sales_others PARTITION OF sales_range DEFAULT; --- no error: bounds of sales_noerror equals to lower and upper bounds of sales_dec2022 and sales_feb2022 +-- no error: bounds of sales_noerror are equal to lower and upper bounds of sales_dec2022 and sales_feb2022 ALTER TABLE sales_range SPLIT PARTITION sales_others INTO (PARTITION sales_dec2022 FOR VALUES FROM (20211201) TO (20220101), PARTITION sales_noerror FOR VALUES FROM (20210101) TO (20210201), @@ -361,7 +361,7 @@ SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conre SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'sales_mar2022'::regclass::oid; SELECT pg_get_constraintdef(oid), conname, conkey FROM pg_constraint WHERE conrelid = 'sales_apr2022'::regclass::oid; --- ERROR: new row for relation "sales_mar2022" violates check constraint "sales_range_salesman_id_check" +-- ERROR: new row for relation "sales_mar2022" violates check constraint "sales_range_sales_amount_check" INSERT INTO sales_range VALUES (1, 0, '2022-03-11'); -- ERROR: insert or update on table "sales_mar2022" violates foreign key constraint "sales_range_salesman_id_fkey" INSERT INTO sales_range VALUES (-1, 10, '2022-03-11'); @@ -609,7 +609,7 @@ CREATE TABLE sales_nord PARTITION OF sales_list FOR VALUES IN ('Oslo', 'St. Pete CREATE TABLE sales_all PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Lisbon', 'New York', 'Madrid', 'Bejing', 'Berlin', 'Delhi', 'Kyiv', 'Vladivostok'); CREATE TABLE sales_others PARTITION OF sales_list DEFAULT; --- ERROR: partition "sales_east" would overlap partition "sales_nord" +-- ERROR: new partition "sales_east" would overlap with another (not split) partition "sales_nord" ALTER TABLE sales_list SPLIT PARTITION sales_all INTO (PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'), PARTITION sales_east FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok', 'Helsinki'), @@ -645,13 +645,13 @@ PARTITION BY LIST (sales_state); CREATE TABLE sales_nord PARTITION OF sales_list FOR VALUES IN ('Helsinki', 'St. Petersburg', 'Oslo'); CREATE TABLE sales_all PARTITION OF sales_list FOR VALUES IN ('Warsaw', 'Lisbon', 'New York', 'Madrid', 'Bejing', 'Berlin', 'Delhi', 'Kyiv', 'Vladivostok', NULL); --- ERROR: new partitions not have value NULL but split partition has +-- ERROR: new partitions do not have value NULL but split partition does ALTER TABLE sales_list SPLIT PARTITION sales_all INTO (PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'), PARTITION sales_east FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok'), PARTITION sales_central FOR VALUES IN ('Warsaw', 'Berlin', 'Kyiv')); --- ERROR: new partitions not have value 'Kyiv' but split partition has +-- ERROR: new partitions do not have value 'Kyiv' but split partition does ALTER TABLE sales_list SPLIT PARTITION sales_all INTO (PARTITION sales_west FOR VALUES IN ('Lisbon', 'New York', 'Madrid'), PARTITION sales_east FOR VALUES IN ('Bejing', 'Delhi', 'Vladivostok'), -- 2.31.0