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

Commit9b41d1d

Browse files
committed
Throw a more on-point error for functions depending on columns.
ALTER COLUMN TYPE wasn't expecting to find any pg_proc objectsdepending on the column whose type is to be altered. That indeedwasn't possible when this code was written, but it is possiblesince we introduced new-style SQL function bodies.It's about as difficult to fix this case as it is to fix dependentviews, and we've been punting on those for years, so I don't feeltoo awful about punting for functions too. (I sure wouldn't riskback-patching such code.) So just throw a more user-facing error.Also, adjust some of the existing comments to reflect that theseare all pretty much the same issue.(This patch also fixes it so we will tolerate finding such adependency during ALTER COLUMN SET EXPRESSION; in that, we neednot do anything to the function, so no error is wanted. Thatproblem is new in HEAD.)Per bug #18449 from Alexander Lakhin. Back-patch to v14 wherewe added new-style SQL functions.Discussion:https://postgr.es/m/18449-f8248467aaa294d5@postgresql.org
1 parente6e3ee5 commit9b41d1d

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

‎src/backend/commands/tablecmds.c

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12704,8 +12704,29 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
1270412704
RememberConstraintForRebuilding(foundObject.objectId, tab);
1270512705
break;
1270612706

12707+
case OCLASS_PROC:
12708+
12709+
/*
12710+
* A new-style SQL function can depend on a column, if that
12711+
* column is referenced in the parsed function body. Ideally
12712+
* we'd automatically update the function by deparsing and
12713+
* reparsing it, but that's risky and might well fail anyhow.
12714+
* FIXME someday.
12715+
*/
12716+
ereport(ERROR,
12717+
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
12718+
errmsg("cannot alter type of a column used by a function or procedure"),
12719+
errdetail("%s depends on column \"%s\"",
12720+
getObjectDescription(&foundObject, false),
12721+
colName)));
12722+
break;
12723+
1270712724
case OCLASS_REWRITE:
12708-
/* XXX someday see if we can cope with revising views */
12725+
12726+
/*
12727+
* View/rule bodies have pretty much the same issues as
12728+
* function bodies. FIXME someday.
12729+
*/
1270912730
ereport(ERROR,
1271012731
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
1271112732
errmsg("cannot alter type of a column used by a view or rule"),
@@ -12721,9 +12742,9 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
1272112742
* specified as an update target, or because the column is
1272212743
* used in the trigger's WHEN condition. The first case would
1272312744
* not require any extra work, but the second case would
12724-
* require updating the WHEN expression, whichwill take a
12725-
*significant amount of new code. Since we can't easily tell
12726-
*which caseapplies, we punt for both. FIXME someday.
12745+
* require updating the WHEN expression, whichhas the same
12746+
*issues as above. Since we can't easily tell which case
12747+
* applies, we punt for both. FIXME someday.
1272712748
*/
1272812749
ereport(ERROR,
1272912750
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
@@ -12795,7 +12816,6 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
1279512816
RememberStatisticsForRebuilding(foundObject.objectId, tab);
1279612817
break;
1279712818

12798-
case OCLASS_PROC:
1279912819
case OCLASS_TYPE:
1280012820
case OCLASS_CAST:
1280112821
case OCLASS_COLLATION:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp