mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Throw an appropriate error if ALTER COLUMN TYPE finds a dependent trigger.
Actually making this case work, if the column is used in the trigger's WHEN condition, will take some new code that probably isn't appropriate to back-patch. For now, just throw a FEATURE_NOT_SUPPORTED error rather than allowing control to reach the "unexpected object" case. Per bug #5688 from Daniel Grace. Back-patch to 9.0 where the possibility of such a dependency was introduced.
This commit is contained in:
parent
a0ccae7ed4
commit
8178d9480a
@ -6148,6 +6148,24 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
colName)));
|
||||
break;
|
||||
|
||||
case OCLASS_TRIGGER:
|
||||
/*
|
||||
* A trigger can depend on a column because the column is
|
||||
* specified as an update target, or because the column is
|
||||
* used in the trigger's WHEN condition. The first case would
|
||||
* not require any extra work, but the second case would
|
||||
* require updating the WHEN expression, which will take a
|
||||
* significant amount of new code. Since we can't easily tell
|
||||
* which case applies, we punt for both. FIXME someday.
|
||||
*/
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("cannot alter type of a column used in a trigger definition"),
|
||||
errdetail("%s depends on column \"%s\"",
|
||||
getObjectDescription(&foundObject),
|
||||
colName)));
|
||||
break;
|
||||
|
||||
case OCLASS_DEFAULT:
|
||||
|
||||
/*
|
||||
@ -6168,7 +6186,6 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
|
||||
case OCLASS_OPFAMILY:
|
||||
case OCLASS_AMOP:
|
||||
case OCLASS_AMPROC:
|
||||
case OCLASS_TRIGGER:
|
||||
case OCLASS_SCHEMA:
|
||||
case OCLASS_TSPARSER:
|
||||
case OCLASS_TSDICT:
|
||||
|
Loading…
Reference in New Issue
Block a user