ProcedureCreate neglected to record dependencies on default expressions.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 3 Oct 2011 16:13:15 +0000 (12:13 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 3 Oct 2011 16:13:15 +0000 (12:13 -0400)
Thus, an object referenced in a default expression could be dropped while
the function remained present.  This was unaccountably missed in the
original patch to add default parameters for functions.  Reported by
Pavel Stehule.

src/backend/catalog/pg_proc.c

index f2b78b66a4494b608025fd46475a002ef4ed85e2..5f7d7f6b68b25956f225cf501b69e20765a8537c 100644 (file)
@@ -599,6 +599,11 @@ ProcedureCreate(const char *procedureName,
        recordDependencyOn(&myself, &referenced, DEPENDENCY_NORMAL);
    }
 
+   /* dependency on parameter default expressions */
+   if (parameterDefaults)
+       recordDependencyOnExpr(&myself, (Node *) parameterDefaults,
+                              NIL, DEPENDENCY_NORMAL);
+
    /* dependency on owner */
    if (!is_update)
        recordDependencyOnOwner(ProcedureRelationId, retval, proowner);