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

Commit5867ee0

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 parentb39c527 commit5867ee0

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
@@ -12333,6 +12333,16 @@ ATPrepAlterColumnType(List **wqueue,
1233312333
errmsg("cannot alter system column \"%s\"",
1233412334
colName)));
1233512335

12336+
/*
12337+
* Cannot specify USING when altering type of a generated column, because
12338+
* that would violate the generation expression.
12339+
*/
12340+
if (attTup->attgenerated && def->cooked_default)
12341+
ereport(ERROR,
12342+
(errcode(ERRCODE_INVALID_COLUMN_DEFINITION),
12343+
errmsg("cannot specify USING when altering type of generated column"),
12344+
errdetail("Column \"%s\" is a generated column.", colName)));
12345+
1233612346
/*
1233712347
* Don't alter inherited columns. At outer level, there had better not be
1233812348
* any inherited definition; when recursing, we assume this was checked at
@@ -12409,11 +12419,12 @@ ATPrepAlterColumnType(List **wqueue,
1240912419
(errcode(ERRCODE_DATATYPE_MISMATCH),
1241012420
errmsg("column \"%s\" cannot be cast automatically to type %s",
1241112421
colName, format_type_be(targettype)),
12422+
!attTup->attgenerated ?
1241212423
/* translator: USING is SQL, don't translate it */
1241312424
errhint("You might need to specify \"USING %s::%s\".",
1241412425
quote_identifier(colName),
1241512426
format_type_with_typemod(targettype,
12416-
targettypmod))));
12427+
targettypmod)) : 0));
1241712428
}
1241812429

1241912430
/* 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
@@ -888,7 +888,8 @@ SELECT * FROM gtest27;
888888
(2 rows)
889889

890890
ALTER TABLE gtest27 ALTER COLUMN x TYPE boolean USING x <> 0; -- error
891-
ERROR: generation expression for column "x" cannot be cast automatically to type boolean
891+
ERROR: cannot specify USING when altering type of generated column
892+
DETAIL: Column "x" is a generated column.
892893
ALTER TABLE gtest27 ALTER COLUMN x DROP DEFAULT; -- error
893894
ERROR: column "x" of relation "gtest27" is a generated column
894895
HINT: Use ALTER TABLE ... ALTER COLUMN ... DROP EXPRESSION instead.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp