From: Tom Lane Date: Sat, 2 Oct 2010 22:21:41 +0000 (-0400) Subject: Throw an appropriate error if ALTER COLUMN TYPE finds a dependent trigger. X-Git-Tag: REL9_1_ALPHA2~120 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f0b62e8c28026f5d1d3693087f7b4aef6a191af;p=postgresql 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. --- diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index a5d7af6042..403e55af91 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -6411,6 +6411,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: /* @@ -6431,7 +6449,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: