diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c
index 35df2eae264169437b44264ac0ea817c90c4353d..0da47aa0564ac38852cc7cae42cae772fc0676a5 100644
--- a/src/backend/catalog/dependency.c
+++ b/src/backend/catalog/dependency.c
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/dependency.c,v 1.22 2003/02/16 02:30:37 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/dependency.c,v 1.23 2003/03/06 22:54:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -97,12 +97,14 @@ static void findAutoDeletableObjects(const ObjectAddress *object,
 									 Relation depRel);
 static bool recursiveDeletion(const ObjectAddress *object,
 				  DropBehavior behavior,
+				  int msglevel,
 				  const ObjectAddress *callingObject,
 				  ObjectAddresses *oktodelete,
 				  Relation depRel);
 static bool deleteDependentObjects(const ObjectAddress *object,
 								   const char *objDescription,
 								   DropBehavior behavior,
+								   int msglevel,
 								   ObjectAddresses *oktodelete,
 								   Relation depRel);
 static void doDeletion(const ObjectAddress *object);
@@ -164,7 +166,8 @@ performDeletion(const ObjectAddress *object,
 
 	findAutoDeletableObjects(object, &oktodelete, depRel);
 
-	if (!recursiveDeletion(object, behavior, NULL, &oktodelete, depRel))
+	if (!recursiveDeletion(object, behavior, NOTICE,
+						   NULL, &oktodelete, depRel))
 		elog(ERROR, "Cannot drop %s because other objects depend on it"
 			 "\n\tUse DROP ... CASCADE to drop the dependent objects too",
 			 objDescription);
@@ -183,10 +186,12 @@ performDeletion(const ObjectAddress *object,
  * CASCADE.
  *
  * This is currently used only to clean out the contents of a schema
- * (namespace): the passed object is a namespace.
+ * (namespace): the passed object is a namespace.  We normally want this
+ * to be done silently, so there's an option to suppress NOTICE messages.
  */
 void
-deleteWhatDependsOn(const ObjectAddress *object)
+deleteWhatDependsOn(const ObjectAddress *object,
+					bool showNotices)
 {
 	char	   *objDescription;
 	Relation	depRel;
@@ -218,7 +223,9 @@ deleteWhatDependsOn(const ObjectAddress *object)
 	 * stuff dependent on the given object.
 	 */
 	if (!deleteDependentObjects(object, objDescription,
-								DROP_CASCADE, &oktodelete, depRel))
+								DROP_CASCADE,
+								showNotices ? NOTICE : DEBUG1,
+								&oktodelete, depRel))
 		elog(ERROR, "Failed to drop all objects depending on %s",
 			 objDescription);
 
@@ -342,7 +349,7 @@ findAutoDeletableObjects(const ObjectAddress *object,
  * depRel is the already-open pg_depend relation.
  *
  *
- * In RESTRICT mode, we perform all the deletions anyway, but elog a NOTICE
+ * In RESTRICT mode, we perform all the deletions anyway, but elog a message
  * and return FALSE if we find a restriction violation.  performDeletion
  * will then abort the transaction to nullify the deletions.  We have to
  * do it this way to (a) report all the direct and indirect dependencies
@@ -370,6 +377,7 @@ findAutoDeletableObjects(const ObjectAddress *object,
 static bool
 recursiveDeletion(const ObjectAddress *object,
 				  DropBehavior behavior,
+				  int msglevel,
 				  const ObjectAddress *callingObject,
 				  ObjectAddresses *oktodelete,
 				  Relation depRel)
@@ -518,18 +526,17 @@ recursiveDeletion(const ObjectAddress *object,
 				 getObjectDescription(&owningObject));
 		else if (behavior == DROP_RESTRICT)
 		{
-			elog(NOTICE, "%s depends on %s",
+			elog(msglevel, "%s depends on %s",
 				 getObjectDescription(&owningObject),
 				 objDescription);
 			ok = false;
 		}
 		else
-			elog(NOTICE, "Drop cascades to %s",
+			elog(msglevel, "Drop cascades to %s",
 				 getObjectDescription(&owningObject));
 
-		if (!recursiveDeletion(&owningObject, behavior,
-							   object,
-							   oktodelete, depRel))
+		if (!recursiveDeletion(&owningObject, behavior, msglevel,
+							   object, oktodelete, depRel))
 			ok = false;
 
 		pfree(objDescription);
@@ -546,7 +553,8 @@ recursiveDeletion(const ObjectAddress *object,
 	 * constraint.
 	 */
 	if (!deleteDependentObjects(object, objDescription,
-								behavior, oktodelete, depRel))
+								behavior, msglevel,
+								oktodelete, depRel))
 		ok = false;
 
 	/*
@@ -613,6 +621,7 @@ static bool
 deleteDependentObjects(const ObjectAddress *object,
 					   const char *objDescription,
 					   DropBehavior behavior,
+					   int msglevel,
 					   ObjectAddresses *oktodelete,
 					   Relation depRel)
 {
@@ -664,18 +673,17 @@ deleteDependentObjects(const ObjectAddress *object,
 						 getObjectDescription(&otherObject));
 				else if (behavior == DROP_RESTRICT)
 				{
-					elog(NOTICE, "%s depends on %s",
+					elog(msglevel, "%s depends on %s",
 						 getObjectDescription(&otherObject),
 						 objDescription);
 					ok = false;
 				}
 				else
-					elog(NOTICE, "Drop cascades to %s",
+					elog(msglevel, "Drop cascades to %s",
 						 getObjectDescription(&otherObject));
 
-				if (!recursiveDeletion(&otherObject, behavior,
-									   object,
-									   oktodelete, depRel))
+				if (!recursiveDeletion(&otherObject, behavior, msglevel,
+									   object, oktodelete, depRel))
 					ok = false;
 				break;
 			case DEPENDENCY_AUTO:
@@ -689,9 +697,8 @@ deleteDependentObjects(const ObjectAddress *object,
 				elog(DEBUG1, "Drop auto-cascades to %s",
 					 getObjectDescription(&otherObject));
 
-				if (!recursiveDeletion(&otherObject, behavior,
-									   object,
-									   oktodelete, depRel))
+				if (!recursiveDeletion(&otherObject, behavior, msglevel,
+									   object, oktodelete, depRel))
 					ok = false;
 				break;
 			case DEPENDENCY_PIN:
diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c
index 550a0547bb31c8b766816bbba17bd7a3f0636f99..367903f59fa7dce868da14bdf24f95a887adb098 100644
--- a/src/backend/catalog/namespace.c
+++ b/src/backend/catalog/namespace.c
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/namespace.c,v 1.47 2003/02/09 06:56:26 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/namespace.c,v 1.48 2003/03/06 22:54:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1698,7 +1698,7 @@ RemoveTempRelations(Oid tempNamespaceId)
 	object.objectId = tempNamespaceId;
 	object.objectSubId = 0;
 
-	deleteWhatDependsOn(&object);
+	deleteWhatDependsOn(&object, false);
 }
 
 /*
diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h
index 4cc4e995418d4073d1ec62d4dff4f4456438ac3f..7a17ce92873d92d1fa075569ea0a0098d922675d 100644
--- a/src/include/catalog/dependency.h
+++ b/src/include/catalog/dependency.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: dependency.h,v 1.6 2003/02/07 01:33:06 tgl Exp $
+ * $Id: dependency.h,v 1.7 2003/03/06 22:54:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -84,7 +84,8 @@ typedef struct ObjectAddress
 extern void performDeletion(const ObjectAddress *object,
 				DropBehavior behavior);
 
-extern void deleteWhatDependsOn(const ObjectAddress *object);
+extern void deleteWhatDependsOn(const ObjectAddress *object,
+								bool showNotices);
 
 extern void recordDependencyOnExpr(const ObjectAddress *depender,
 					   Node *expr, List *rtable,