From: Tom Lane Date: Tue, 28 Oct 2003 21:05:29 +0000 (+0000) Subject: Don't choke when the handler for a procedural language is located in X-Git-Tag: REL7_4_RC1~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e554e2b090d8f9360ec7814ebec0eaa2e351b693;p=thirdparty%2Fpostgresql.git 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. --- diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 485f623ff84..134e9522a37 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -12,7 +12,7 @@ * by PostgreSQL * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.354 2003/10/21 04:46:28 tgl Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.355 2003/10/28 21:05:29 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -3539,25 +3539,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 @@ -3565,10 +3546,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);