summaryrefslogtreecommitdiff
path: root/src/backend/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands')
-rw-r--r--src/backend/commands/alter.c8
-rw-r--r--src/backend/commands/tablecmds.c26
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);
/*