aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2013-06-04 17:22:29 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2013-06-04 17:22:29 -0400
commit530acda4dabe26a4345eccd28a92dd23b1e7a94a (patch)
treeebbae5feb421febec3ddea0b0e1a3b5b7a36509a
parent5c7603c318872a42e1665b228f68fdf58714d945 (diff)
downloadpostgresql-530acda4dabe26a4345eccd28a92dd23b1e7a94a.tar.gz
postgresql-530acda4dabe26a4345eccd28a92dd23b1e7a94a.zip
Provide better message when CREATE EXTENSION can't find a target schema.
The new message (and SQLSTATE) matches the corresponding error cases in namespace.c. This was thought to be a "can't happen" case when extension.c was written, so we didn't think hard about how to report it. But it definitely can happen in 9.2 and later, since we no longer require search_path to contain any valid schema names. It's probably also possible in 9.1 if search_path came from a noninteractive source. So, back-patch to all releases containing this code. Per report from Sean Chittenden, though this isn't exactly his patch.
-rw-r--r--src/backend/commands/extension.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 2d84ac8620d..08e8cade6b1 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -1394,12 +1394,16 @@ CreateExtension(CreateExtensionStmt *stmt)
*/
List *search_path = fetch_search_path(false);
- if (search_path == NIL) /* probably can't happen */
- elog(ERROR, "there is no default creation target");
+ if (search_path == NIL) /* nothing valid in search_path? */
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_SCHEMA),
+ errmsg("no schema has been selected to create in")));
schemaOid = linitial_oid(search_path);
schemaName = get_namespace_name(schemaOid);
if (schemaName == NULL) /* recently-deleted namespace? */
- elog(ERROR, "there is no default creation target");
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_SCHEMA),
+ errmsg("no schema has been selected to create in")));
list_free(search_path);
}