Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4d68a04

Browse files
committed
Disallow USING clause when altering type of generated column
This does not make sense. It would write the output of the USINGclause into the converted column, which would violate the generationexpression. This adds a check to error out if this is specified.There was a test for this, but that test errored out for a differentreason, 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
1 parent478846e commit4d68a04

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

‎src/backend/commands/tablecmds.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12677,6 +12677,16 @@ ATPrepAlterColumnType(List **wqueue,
1267712677
errmsg("cannot alter system column \"%s\"",
1267812678
colName)));
1267912679

12680+
/*
12681+
* Cannot specify USING when altering type of a generated column, because
12682+
* that would violate the generation expression.
12683+
*/
12684+
if (attTup->attgenerated && def->cooked_default)
12685+
ereport(ERROR,
12686+
(errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
12687+
errmsg("cannot specify USING when altering type of generated column"),
12688+
errdetail("Column \"%s\" is a generated column.", colName)));
12689+
1268012690
/*
1268112691
* Don't alter inherited columns. At outer level, there had better not be
1268212692
* any inherited definition; when recursing, we assume this was checked at
@@ -12753,11 +12763,12 @@ ATPrepAlterColumnType(List **wqueue,
1275312763
(errcode(ERRCODE_DATATYPE_MISMATCH),
1275412764
errmsg("column \"%s\" cannot be cast automatically to type %s",
1275512765
colName, format_type_be(targettype)),
12766+
!attTup->attgenerated ?
1275612767
/* translator: USING is SQL, don't translate it */
1275712768
errhint("You might need to specify \"USING %s::%s\".",
1275812769
quote_identifier(colName),
1275912770
format_type_with_typemod(targettype,
12760-
targettypmod))));
12771+
targettypmod)) : 0));
1276112772
}
1276212773

1276312774
/* Fix collations after all else */

‎src/test/regress/expected/generated.out

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,8 @@ SELECT * FROM gtest27;
10261026
(2 rows)
10271027

10281028
ALTER TABLE gtest27 ALTER COLUMN x TYPE boolean USING x <> 0; -- error
1029-
ERROR: generation expression for column "x" cannot be cast automatically to type boolean
1029+
ERROR: cannot specify USING when altering type of generated column
1030+
DETAIL: Column "x" is a generated column.
10301031
ALTER TABLE gtest27 ALTER COLUMN x DROP DEFAULT; -- error
10311032
ERROR: column "x" of relation "gtest27" is a generated column
10321033
HINT: Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp