diff options
Diffstat (limited to 'src/backend/commands/tablecmds.c')
-rw-r--r-- | src/backend/commands/tablecmds.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 26a4613c474..08b037e501f 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -690,10 +690,28 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId) * non-existent relation */ static void -DropErrorMsgNonExistent(const char *relname, char rightkind, bool missing_ok) +DropErrorMsgNonExistent(RangeVar *rel, char rightkind, bool missing_ok) { const struct dropmsgstrings *rentry; + if (rel->schemaname != NULL && + !OidIsValid(LookupNamespaceNoError(rel->schemaname))) + { + if (!missing_ok) + { + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_SCHEMA), + errmsg("schema \"%s\" does not exist", rel->schemaname))); + } + else + { + ereport(NOTICE, + (errmsg("schema \"%s\" does not exist, skipping", + rel->schemaname))); + } + return; + } + for (rentry = dropmsgstringarray; rentry->kind != '\0'; rentry++) { if (rentry->kind == rightkind) @@ -702,11 +720,11 @@ DropErrorMsgNonExistent(const char *relname, char rightkind, bool missing_ok) { ereport(ERROR, (errcode(rentry->nonexistent_code), - errmsg(rentry->nonexistent_msg, relname))); + errmsg(rentry->nonexistent_msg, rel->relname))); } else { - ereport(NOTICE, (errmsg(rentry->skipping_msg, relname))); + ereport(NOTICE, (errmsg(rentry->skipping_msg, rel->relname))); break; } } @@ -845,7 +863,7 @@ RemoveRelations(DropStmt *drop) /* Not there? */ if (!OidIsValid(relOid)) { - DropErrorMsgNonExistent(rel->relname, relkind, drop->missing_ok); + DropErrorMsgNonExistent(rel, relkind, drop->missing_ok); continue; } |