aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_utilcmd.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2020-09-28 13:44:01 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2020-09-28 13:44:01 -0400
commit2dfa3fea88bc951d0812a18649d801f07964c9b9 (patch)
treef377dfeeca5ca36d630fdeeb655f274708bcf7be /src/backend/parser/parse_utilcmd.c
parent0a87ddff5c83589e90de236bd55e6a19b017fe9a (diff)
downloadpostgresql-2dfa3fea88bc951d0812a18649d801f07964c9b9.tar.gz
postgresql-2dfa3fea88bc951d0812a18649d801f07964c9b9.zip
Remove complaints about COLLATE clauses in partition bound values.
transformPartitionBoundValue went out of its way to do the wrong thing: there is no reason to complain about a non-matching COLLATE clause in a partition boundary expression. We're coercing the bound expression to the target column type as though by an implicit assignment, and the rules for implicit assignment say that collations can be implicitly converted. What we *do* need to do, and the code is not doing, is apply assign_expr_collations() to the bound expression. While this is merely a definition disagreement, that is a bug that needs to be back-patched, so I'll commit it separately. Discussion: https://postgr.es/m/CAJV4CdrZ5mKuaEsRSbLf2URQ3h6iMtKD=hik8MaF5WwdmC9uZw@mail.gmail.com
Diffstat (limited to 'src/backend/parser/parse_utilcmd.c')
-rw-r--r--src/backend/parser/parse_utilcmd.c44
1 files changed, 0 insertions, 44 deletions
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index 164312d60e2..6d2f36da2df 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -4184,50 +4184,6 @@ transformPartitionBoundValue(ParseState *pstate, Node *val,
Assert(!contain_var_clause(value));
/*
- * Check that the input expression's collation is compatible with one
- * specified for the parent's partition key (partcollation). Don't throw
- * an error if it's the default collation which we'll replace with the
- * parent's collation anyway.
- */
- if (IsA(value, CollateExpr))
- {
- Oid exprCollOid = exprCollation(value);
-
- /*
- * Check we have a collation iff it is a collatable type. The only
- * expected failures here are (1) COLLATE applied to a noncollatable
- * type, or (2) partition bound expression had an unresolved
- * collation. But we might as well code this to be a complete
- * consistency check.
- */
- if (type_is_collatable(colType))
- {
- if (!OidIsValid(exprCollOid))
- ereport(ERROR,
- (errcode(ERRCODE_INDETERMINATE_COLLATION),
- errmsg("could not determine which collation to use for partition bound expression"),
- errhint("Use the COLLATE clause to set the collation explicitly.")));
- }
- else
- {
- if (OidIsValid(exprCollOid))
- 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)
- ereport(ERROR,
- (errcode(ERRCODE_DATATYPE_MISMATCH),
- errmsg("collation of partition bound value for column \"%s\" does not match partition key collation \"%s\"",
- colName, get_collation_name(partCollation)),
- parser_errposition(pstate, exprLocation(value))));
- }
-
- /*
* Coerce to the correct type. This might cause an explicit coercion step
* to be added on top of the expression, which must be evaluated before
* returning the result to the caller.