aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/tablecmds.c
diff options
context:
space:
mode:
authorSimon Riggs <simon@2ndQuadrant.com>2012-01-23 23:25:04 +0000
committerSimon Riggs <simon@2ndQuadrant.com>2012-01-23 23:25:04 +0000
commitb8a91d9d1c7ec75aaecf13df687ec7b5b0ed35a6 (patch)
treef49bd1ea95c2e141cb8fadd0495f682134053d38 /src/backend/commands/tablecmds.c
parent4993a49b7cf1d23dfe1f9e1a85d9411b8ff57454 (diff)
downloadpostgresql-b8a91d9d1c7ec75aaecf13df687ec7b5b0ed35a6.tar.gz
postgresql-b8a91d9d1c7ec75aaecf13df687ec7b5b0ed35a6.zip
ALTER <thing> [IF EXISTS] ... allows silent DDL if required,
e.g. ALTER FOREIGN TABLE IF EXISTS foo RENAME TO bar Pavel Stehule
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r--src/backend/commands/tablecmds.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index cc210f06d30..cb8ac67812a 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -2310,9 +2310,18 @@ renameatt(RenameStmt *stmt)
/* lock level taken here should match renameatt_internal */
relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
- false, false,
+ stmt->missing_ok, false,
RangeVarCallbackForRenameAttribute,
NULL);
+
+ if (!OidIsValid(relid))
+ {
+ ereport(NOTICE,
+ (errmsg("relation \"%s\" does not exist, skipping",
+ stmt->relation->relname)));
+ return;
+ }
+
renameatt_internal(relid,
stmt->subname, /* old att name */
stmt->newname, /* new att name */
@@ -2338,10 +2347,18 @@ RenameRelation(RenameStmt *stmt)
* lock escalation.
*/
relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
- false, false,
+ stmt->missing_ok, false,
RangeVarCallbackForAlterRelation,
(void *) stmt);
+ if (!OidIsValid(relid))
+ {
+ ereport(NOTICE,
+ (errmsg("relation \"%s\" does not exist, skipping",
+ stmt->relation->relname)));
+ return;
+ }
+
/* Do the work */
RenameRelationInternal(relid, stmt->newname);
}
@@ -2482,7 +2499,7 @@ CheckTableNotInUse(Relation rel, const char *stmt)
Oid
AlterTableLookupRelation(AlterTableStmt *stmt, LOCKMODE lockmode)
{
- return RangeVarGetRelidExtended(stmt->relation, lockmode, false, false,
+ return RangeVarGetRelidExtended(stmt->relation, lockmode, stmt->missing_ok, false,
RangeVarCallbackForAlterRelation,
(void *) stmt);
}
@@ -9434,9 +9451,18 @@ AlterTableNamespace(AlterObjectSchemaStmt *stmt)
RangeVar *newrv;
relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
- false, false,
+ stmt->missing_ok, false,
RangeVarCallbackForAlterRelation,
(void *) stmt);
+
+ if (!OidIsValid(relid))
+ {
+ ereport(NOTICE,
+ (errmsg("relation \"%s\" does not exist, skipping",
+ stmt->relation->relname)));
+ return;
+ }
+
rel = relation_open(relid, NoLock);
oldNspOid = RelationGetNamespace(rel);