]> granicus.if.org Git - postgresql/commitdiff
Tweak dependency code to suppress NOTICEs generated by new method for
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 6 Mar 2003 22:54:49 +0000 (22:54 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 6 Mar 2003 22:54:49 +0000 (22:54 +0000)
cleaning out temp namespaces.  We don't really want the server log to be
cluttered with 'Drop cascades to table foo' every time someone uses a
temp table...

src/backend/catalog/dependency.c
src/backend/catalog/namespace.c
src/include/catalog/dependency.h

index 35df2eae264169437b44264ac0ea817c90c4353d..0da47aa0564ac38852cc7cae42cae772fc0676a5 100644 (file)
@@ -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:
index 550a0547bb31c8b766816bbba17bd7a3f0636f99..367903f59fa7dce868da14bdf24f95a887adb098 100644 (file)
@@ -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);
 }
 
 /*
index 4cc4e995418d4073d1ec62d4dff4f4456438ac3f..7a17ce92873d92d1fa075569ea0a0098d922675d 100644 (file)
@@ -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,