part_value_collations_v2.patch
text/x-diff
Filename: part_value_collations_v2.patch
Type: text/x-diff
Part: 0
Patch
Format: unified
Series: patch v2
| File | + | − |
|---|---|---|
| src/backend/parser/parse_utilcmd.c | 10 | 0 |
| src/test/regress/expected/create_table.out | 2 | 0 |
| src/test/regress/sql/create_table.sql | 1 | 0 |
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index c1911411d0..403f8148ae 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -4069,6 +4069,16 @@ transformPartitionBoundValue(ParseState *pstate, Node *val,
{
Oid exprCollOid = exprCollation(value);
+ /*
+ * No need to check if exprCollOid is invalid, since if it would be,
+ * then transformCollateClause will throw an error earlier
+ */
+ if (!type_is_collatable(colType))
+ ereport(ERROR,
+ (errcode(ERRCODE_DATATYPE_MISMATCH),
+ errmsg("collations are not supported by type %s",
+ format_type_be(colType))));
+
if (OidIsValid(exprCollOid) &&
exprCollOid != DEFAULT_COLLATION_OID &&
exprCollOid != partCollation)
diff --git a/src/test/regress/expected/create_table.out b/src/test/regress/expected/create_table.out
index c5e95edbed..abd1bfe2b9 100644
--- a/src/test/regress/expected/create_table.out
+++ b/src/test/regress/expected/create_table.out
@@ -594,6 +594,8 @@ CREATE TABLE list_parted (
CREATE TABLE part_p1 PARTITION OF list_parted FOR VALUES IN ('1');
CREATE TABLE part_p2 PARTITION OF list_parted FOR VALUES IN (2);
CREATE TABLE part_p3 PARTITION OF list_parted FOR VALUES IN ((2+1));
+CREATE TABLE part_p4 PARTITION OF list_parted FOR VALUES IN ('1' collate "POSIX");
+ERROR: collations are not supported by type integer
CREATE TABLE part_null PARTITION OF list_parted FOR VALUES IN (null);
\d+ list_parted
Partitioned table "public.list_parted"
diff --git a/src/test/regress/sql/create_table.sql b/src/test/regress/sql/create_table.sql
index 00ef81a685..3fe77a7711 100644
--- a/src/test/regress/sql/create_table.sql
+++ b/src/test/regress/sql/create_table.sql
@@ -522,6 +522,7 @@ CREATE TABLE list_parted (
CREATE TABLE part_p1 PARTITION OF list_parted FOR VALUES IN ('1');
CREATE TABLE part_p2 PARTITION OF list_parted FOR VALUES IN (2);
CREATE TABLE part_p3 PARTITION OF list_parted FOR VALUES IN ((2+1));
+CREATE TABLE part_p4 PARTITION OF list_parted FOR VALUES IN ('1' collate "POSIX");
CREATE TABLE part_null PARTITION OF list_parted FOR VALUES IN (null);
\d+ list_parted