diff options
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/alter.c | 8 | ||||
-rw-r--r-- | src/backend/commands/tablecmds.c | 26 |
2 files changed, 28 insertions, 6 deletions
diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c index 118e4adb166..7cd347b69f9 100644 --- a/src/backend/commands/alter.c +++ b/src/backend/commands/alter.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/alter.c,v 1.23 2007/03/26 16:58:38 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/alter.c,v 1.24 2007/07/03 01:30:36 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -83,6 +83,8 @@ ExecRenameStmt(RenameStmt *stmt) break; case OBJECT_TABLE: + case OBJECT_SEQUENCE: + case OBJECT_VIEW: case OBJECT_INDEX: case OBJECT_COLUMN: case OBJECT_TRIGGER: @@ -96,6 +98,8 @@ ExecRenameStmt(RenameStmt *stmt) switch (stmt->renameType) { case OBJECT_TABLE: + case OBJECT_SEQUENCE: + case OBJECT_VIEW: case OBJECT_INDEX: { /* @@ -113,7 +117,7 @@ ExecRenameStmt(RenameStmt *stmt) aclcheck_error(aclresult, ACL_KIND_NAMESPACE, get_namespace_name(namespaceId)); - renamerel(relid, stmt->newname); + renamerel(relid, stmt->newname, stmt->renameType); break; } case OBJECT_COLUMN: diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index f50b59d0d8f..4bc2a25fcdd 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.228 2007/06/23 22:12:50 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.229 2007/07/03 01:30:36 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -41,6 +41,7 @@ #include "executor/executor.h" #include "miscadmin.h" #include "nodes/makefuncs.h" +#include "nodes/parsenodes.h" #include "optimizer/clauses.h" #include "optimizer/plancat.h" #include "optimizer/prep.h" @@ -1621,7 +1622,7 @@ renameatt(Oid myrelid, * sequence, AFAIK there's no need for it to be there. */ void -renamerel(Oid myrelid, const char *newrelname) +renamerel(Oid myrelid, const char *newrelname, ObjectType reltype) { Relation targetrelation; Relation relrelation; /* for RELATION relation */ @@ -1633,8 +1634,8 @@ renamerel(Oid myrelid, const char *newrelname) bool relhastriggers; /* - * Grab an exclusive lock on the target table or index, which we will NOT - * release until end of transaction. + * Grab an exclusive lock on the target table, index, sequence or + * view, which we will NOT release until end of transaction. */ targetrelation = relation_open(myrelid, AccessExclusiveLock); @@ -1647,7 +1648,24 @@ renamerel(Oid myrelid, const char *newrelname) errmsg("permission denied: \"%s\" is a system catalog", RelationGetRelationName(targetrelation)))); + /* + * For compatibility with prior releases, we don't complain if + * ALTER TABLE or ALTER INDEX is used to rename a sequence or + * view. + */ relkind = targetrelation->rd_rel->relkind; + if (reltype == OBJECT_SEQUENCE && relkind != 'S') + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is not a sequence", + RelationGetRelationName(targetrelation)))); + + if (reltype == OBJECT_VIEW && relkind != 'v') + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("\"%s\" is not a view", + RelationGetRelationName(targetrelation)))); + relhastriggers = (targetrelation->rd_rel->reltriggers > 0); /* |