mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Improve error message and hint for ALTER COLUMN TYPE can't-cast failure.
We already tried to improve this once, but the "improved" text was rather off-target if you had provided a USING clause. Also, it seems helpful to provide the exact text of a suggested USING clause, so users can just copy-and-paste it when needed. Per complaint from Keith Rarick and a suggestion from Merlin Moncure. Back-patch to 9.2 where the current wording was adopted.
This commit is contained in:
@ -7266,11 +7266,26 @@ ATPrepAlterColumnType(List **wqueue,
|
||||
COERCE_IMPLICIT_CAST,
|
||||
-1);
|
||||
if (transform == NULL)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATATYPE_MISMATCH),
|
||||
errmsg("column \"%s\" cannot be cast automatically to type %s",
|
||||
colName, format_type_be(targettype)),
|
||||
errhint("Specify a USING expression to perform the conversion.")));
|
||||
{
|
||||
/* error text depends on whether USING was specified or not */
|
||||
if (def->raw_default != NULL)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATATYPE_MISMATCH),
|
||||
errmsg("result of USING clause for column \"%s\""
|
||||
" cannot be cast automatically to type %s",
|
||||
colName, format_type_be(targettype)),
|
||||
errhint("You might need to add an explicit cast.")));
|
||||
else
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DATATYPE_MISMATCH),
|
||||
errmsg("column \"%s\" cannot be cast automatically to type %s",
|
||||
colName, format_type_be(targettype)),
|
||||
/* translator: USING is SQL, don't translate it */
|
||||
errhint("You might need to specify \"USING %s::%s\".",
|
||||
quote_identifier(colName),
|
||||
format_type_with_typemod(targettype,
|
||||
targettypmod))));
|
||||
}
|
||||
|
||||
/* Fix collations after all else */
|
||||
assign_expr_collations(pstate, transform);
|
||||
|
Reference in New Issue
Block a user