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

Commitcf49a60

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 parent5d91706 commitcf49a60

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
@@ -12307,6 +12307,16 @@ ATPrepAlterColumnType(List **wqueue,
1230712307
errmsg("cannot alter system column \"%s\"",
1230812308
colName)));
1230912309

12310+
/*
12311+
* Cannot specify USING when altering type of a generated column, because
12312+
* that would violate the generation expression.
12313+
*/
12314+
if (attTup->attgenerated && def->cooked_default)
12315+
ereport(ERROR,
12316+
(errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
12317+
errmsg("cannot specify USING when altering type of generated column"),
12318+
errdetail("Column \"%s\" is a generated column.", colName)));
12319+
1231012320
/*
1231112321
* Don't alter inherited columns. At outer level, there had better not be
1231212322
* any inherited definition; when recursing, we assume this was checked at
@@ -12383,11 +12393,12 @@ ATPrepAlterColumnType(List **wqueue,
1238312393
(errcode(ERRCODE_DATATYPE_MISMATCH),
1238412394
errmsg("column \"%s\" cannot be cast automatically to type %s",
1238512395
colName, format_type_be(targettype)),
12396+
!attTup->attgenerated ?
1238612397
/* translator: USING is SQL, don't translate it */
1238712398
errhint("You might need to specify \"USING %s::%s\".",
1238812399
quote_identifier(colName),
1238912400
format_type_with_typemod(targettype,
12390-
targettypmod))));
12401+
targettypmod)) : 0));
1239112402
}
1239212403

1239312404
/* 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
@@ -836,7 +836,8 @@ SELECT * FROM gtest27;
836836
(2 rows)
837837

838838
ALTER TABLE gtest27 ALTER COLUMN x TYPE boolean USING x <> 0; -- error
839-
ERROR: generation expression for column "x" cannot be cast automatically to type boolean
839+
ERROR: cannot specify USING when altering type of generated column
840+
DETAIL: Column "x" is a generated column.
840841
ALTER TABLE gtest27 ALTER COLUMN x DROP DEFAULT; -- error
841842
ERROR: column "x" of relation "gtest27" is a generated column
842843
HINT: Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp