]> granicus.if.org Git - postgresql/commitdiff
Don't choke when the handler for a procedural language is located in
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 Oct 2003 21:05:39 +0000 (21:05 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 28 Oct 2003 21:05:39 +0000 (21:05 +0000)
the pg_catalog schema.  Per bug report some months back from Jochem van Dieten.

src/bin/pg_dump/pg_dump.c

index f3bd4bee791954113918cc14a63334765d252c61..a6a4d1e0a9761842456f3f8b38bf00c9f6684a7b 100644 (file)
@@ -22,7 +22,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.305.2.8 2003/09/28 17:46:19 wieck Exp $
+ *       $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.305.2.9 2003/10/28 21:05:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3462,25 +3462,6 @@ dumpProcLangs(Archive *fout, FuncInfo finfo[], int numFuncs)
                        lanacl = "{=U}";
                }
 
-               fidx = findFuncByOid(finfo, numFuncs, lanplcallfoid);
-               if (fidx < 0)
-               {
-                       write_msg(NULL, "handler procedure for procedural language %s not found\n",
-                                         lanname);
-                       exit_nicely();
-               }
-
-               if (strcmp(lanvalidator, "0") != 0)
-               {
-                       vidx = findFuncByOid(finfo, numFuncs, lanvalidator);
-                       if (vidx < 0)
-                       {
-                               write_msg(NULL, "validator procedure for procedural language %s not found\n",
-                                                 lanname);
-                               exit_nicely();
-                       }
-               }
-
                /*
                 * Current theory is to dump PLs iff their underlying functions
                 * will be dumped (are in a dumpable namespace, or have a
@@ -3488,10 +3469,27 @@ dumpProcLangs(Archive *fout, FuncInfo finfo[], int numFuncs)
                 * PL itself as being in the underlying function's namespace,
                 * though it isn't really.  This avoids searchpath problems for
                 * the HANDLER clause.
+                *
+                * If the underlying function is in the pg_catalog namespace,
+                * we won't have loaded it into finfo[] at all; therefore,
+                * treat failure to find it in finfo[] as indicating we shouldn't
+                * dump it, not as an error condition.  Ditto for the validator.
                 */
+
+               fidx = findFuncByOid(finfo, numFuncs, lanplcallfoid);
+               if (fidx < 0)
+                       continue;
+
                if (!finfo[fidx].pronamespace->dump)
                        continue;
 
+               if (strcmp(lanvalidator, "0") != 0)
+               {
+                       vidx = findFuncByOid(finfo, numFuncs, lanvalidator);
+                       if (vidx < 0)
+                               continue;
+               }
+
                resetPQExpBuffer(defqry);
                resetPQExpBuffer(delqry);