aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/tablecmds.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2024-08-29 08:38:29 +0200
committerPeter Eisentraut <peter@eisentraut.org>2024-08-29 09:01:02 +0200
commitcf49a606c416634fd6af82eb559331fd6052835d (patch)
tree612d40fbc95fdb2eedfdfb5ad327eb9328a3e4ee /src/backend/commands/tablecmds.c
parent5d9170697e4e6dd282b015890bc29baf978c6cb5 (diff)
downloadpostgresql-cf49a606c416634fd6af82eb559331fd6052835d.tar.gz
postgresql-cf49a606c416634fd6af82eb559331fd6052835d.zip
Disallow USING clause when altering type of generated column
This does not make sense. It would write the output of the USING clause into the converted column, which would violate the generation expression. This adds a check to error out if this is specified. There was a test for this, but that test errored out for a different reason, so it was not effective. Reported-by: Jian He <jian.universality@gmail.com> Reviewed-by: Yugo NAGATA <nagata@sraoss.co.jp> Discussion: https://www.postgresql.org/message-id/flat/c7083982-69f4-4b14-8315-f9ddb20b9834%40eisentraut.org
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r--src/backend/commands/tablecmds.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 44629fb52f4..4f6bf4c959c 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -12308,6 +12308,16 @@ ATPrepAlterColumnType(List **wqueue,
colName)));
/*
+ * Cannot specify USING when altering type of a generated column, because
+ * that would violate the generation expression.
+ */
+ if (attTup->attgenerated && def->cooked_default)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
+ errmsg("cannot specify USING when altering type of generated column"),
+ errdetail("Column \"%s\" is a generated column.", colName)));
+
+ /*
* Don't alter inherited columns. At outer level, there had better not be
* any inherited definition; when recursing, we assume this was checked at
* the parent level (see below).
@@ -12383,11 +12393,12 @@ ATPrepAlterColumnType(List **wqueue,
(errcode(ERRCODE_DATATYPE_MISMATCH),
errmsg("column \"%s\" cannot be cast automatically to type %s",
colName, format_type_be(targettype)),
+ !attTup->attgenerated ?
/* 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))));
+ targettypmod)) : 0));
}
/* Fix collations after all else */