diff options
author | Simon Riggs <simon@2ndQuadrant.com> | 2012-01-23 23:25:04 +0000 |
---|---|---|
committer | Simon Riggs <simon@2ndQuadrant.com> | 2012-01-23 23:25:04 +0000 |
commit | b8a91d9d1c7ec75aaecf13df687ec7b5b0ed35a6 (patch) | |
tree | f49bd1ea95c2e141cb8fadd0495f682134053d38 /src/backend/commands/tablecmds.c | |
parent | 4993a49b7cf1d23dfe1f9e1a85d9411b8ff57454 (diff) | |
download | postgresql-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.c | 34 |
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); |