1
0
mirror of https://github.com/postgres/postgres.git synced 2025-09-09 13:09:39 +03:00

Don't choke when the handler for a procedural language is located in

the pg_catalog schema.  Per bug report some months back from Jochem van Dieten.
This commit is contained in:
Tom Lane
2003-10-28 21:05:39 +00:00
parent 98c7f157f2
commit 0847c879a9

View File

@@ -22,7 +22,7 @@
* *
* *
* IDENTIFICATION * 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}"; 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 * Current theory is to dump PLs iff their underlying functions
* will be dumped (are in a dumpable namespace, or have a * 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, * PL itself as being in the underlying function's namespace,
* though it isn't really. This avoids searchpath problems for * though it isn't really. This avoids searchpath problems for
* the HANDLER clause. * 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) if (!finfo[fidx].pronamespace->dump)
continue; continue;
if (strcmp(lanvalidator, "0") != 0)
{
vidx = findFuncByOid(finfo, numFuncs, lanvalidator);
if (vidx < 0)
continue;
}
resetPQExpBuffer(defqry); resetPQExpBuffer(defqry);
resetPQExpBuffer(delqry); resetPQExpBuffer(delqry);