mirror of
https://github.com/postgres/postgres.git
synced 2025-09-08 00:47:37 +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:
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user