I have had similar troubles, related to oid overflow. I had to modify pg_dump 
to properly cast queries that contain oids. This is against 7.1.3 source. The 
patch was hacked quickly, in order to get a corrupted database reloaded, and 
this while I was traveling in another country... so it is far from perfect but 
saved my database(s). It also fixes other oid-related troubles of pg_dump.

See attached file.

Daniel

>>>Brian Fujito said:
 > Thanks for your input--
 > 
 > I've tried both ways:
 > 
 > createlang/droplang from the command line as user postgres
 > 
 > and:
 > 
 > CREATE FUNCTION plpgsql_call_handler () RETURNS OPAQUE AS
 >         '/usr/lib/pgsql/plpgsql.so' LANGUAGE 'C';
 > 
 > CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
 >         HANDLER plpgsql_call_handler
 >           LANCOMPILER 'PL/pgSQL';
 >        
 > I'm using pg_dump (not pg_dumpall) on the specific database on which
 > I created the language.
 > 
 > I realize 7.0.3 is ancient (same with 7.1)... I just don't have the
 > time to deal with an upgrade quite yet.  Soon enough :)  In the mean
 > time, a stop-gap solution would definitely be appreciated.
 > 
 > Thank you,
 > Brian
 > 
 > 
 > On Mon, 2002-12-09 at 14:28, Tom Lane wrote:
 > > Brian Fujito <[EMAIL PROTECTED]> writes:
 > > > I'm running postgres-7.0.3 on RH7.1 using RedHat RPMs.
 > > > I recently added plpgsql as a language to one of my databases, 
 > > > and now when I try to do a pg_dump, I get:
 > > 
 > > > "dumpProcLangs(): handler procedure for language plpgsql not found"
 > > 
 > > > If I drop the language, pg_dump works fine, but if I add it back (and
 > > > even if I restart postgres), I get the same error.
 > > 
 > > What exactly are you doing to drop and re-add the language?  I should
 > > think CREATE LANGUAGE would fail if the handler proc isn't there.
 > > 
 > > (Also, are you doing pg_dump or pg_dumpall?  If the latter, maybe the
 > > failure is occurring in a different database than the one you are
 > > changing.)
 > > 
 > > But having said that, 7.0.3 is ancient history ... you really are
 > > overdue for an upgrade.  With my Red Hat fedora on, I'd say the same
 > > about your choice of OS version too.
 > > 
 > >                    regards, tom lane
 > 
 > 
 > 
 > ---------------------------(end of broadcast)---------------------------
 > TIP 3: if posting/reading through Usenet, please send an appropriate
 > subscribe-nomail command to [EMAIL PROTECTED] so that your
 > message can get through to the mailing list cleanly

*** pg_dump.c.orig      Mon Apr 15 09:45:58 2002
--- pg_dump.c   Tue Jun 25 00:23:53 2002
***************
*** 2006,2012 ****
                finfo[i].prorettype = strdup(PQgetvalue(res, i, i_prorettype));
                finfo[i].retset = (strcmp(PQgetvalue(res, i, i_proretset), "t") == 0);
                finfo[i].nargs = atoi(PQgetvalue(res, i, i_pronargs));
!               finfo[i].lang = atoi(PQgetvalue(res, i, i_prolang));
                finfo[i].usename = strdup(PQgetvalue(res, i, i_usename));
                finfo[i].iscachable = (strcmp(PQgetvalue(res, i, i_iscachable), "t") 
== 0);
                finfo[i].isstrict = (strcmp(PQgetvalue(res, i, i_isstrict), "t") == 0);
--- 2006,2012 ----
                finfo[i].prorettype = strdup(PQgetvalue(res, i, i_prorettype));
                finfo[i].retset = (strcmp(PQgetvalue(res, i, i_proretset), "t") == 0);
                finfo[i].nargs = atoi(PQgetvalue(res, i, i_pronargs));
!               finfo[i].lang = atooid(PQgetvalue(res, i, i_prolang));
                finfo[i].usename = strdup(PQgetvalue(res, i, i_usename));
                finfo[i].iscachable = (strcmp(PQgetvalue(res, i, i_iscachable), "t") 
== 0);
                finfo[i].isstrict = (strcmp(PQgetvalue(res, i, i_isstrict), "t") == 0);
***************
*** 2289,2295 ****
  
                        resetPQExpBuffer(query);
                        appendPQExpBuffer(query,
!                                                         "SELECT Oid FROM pg_index i 
WHERE i.indisprimary AND i.indrelid = %s ",
                                                          tblinfo[i].oid);
                        res2 = PQexec(g_conn, query->data);
                        if (!res2 || PQresultStatus(res2) != PGRES_TUPLES_OK)
--- 2289,2295 ----
  
                        resetPQExpBuffer(query);
                        appendPQExpBuffer(query,
!                                                         "SELECT Oid FROM pg_index i 
WHERE i.indisprimary AND i.indrelid = oid(%s) ",
                                                          tblinfo[i].oid);
                        res2 = PQexec(g_conn, query->data);
                        if (!res2 || PQresultStatus(res2) != PGRES_TUPLES_OK)
***************
*** 2328,2340 ****
                                appendPQExpBuffer(query,
                                                          "  SELECT c.relname "
                                                          "    FROM pg_index i, 
pg_class c "
!                                                         "    WHERE     i.indrelid = 
%s"
                                                          "        AND   
i.indisprimary "
                                                          "        AND   c.oid = 
i.indexrelid"
                                                          " UNION ALL "
                                                          "  SELECT NULL "
                                                          "    FROM pg_index i "
!                                                         "    WHERE i.indrelid = %s"
                                                          "    AND   i.indisprimary "
                                                          "    And NOT Exists(Select * 
From pg_class c Where c.oid = i.indexrelid)",
                                                          tblinfo[i].oid, 
tblinfo[i].oid);
--- 2328,2340 ----
                                appendPQExpBuffer(query,
                                                          "  SELECT c.relname "
                                                          "    FROM pg_index i, 
pg_class c "
!                                                         "    WHERE     i.indrelid = 
oid(%s)"
                                                          "        AND   
i.indisprimary "
                                                          "        AND   c.oid = 
i.indexrelid"
                                                          " UNION ALL "
                                                          "  SELECT NULL "
                                                          "    FROM pg_index i "
!                                                         "    WHERE i.indrelid = 
oid(%s)"
                                                          "    AND   i.indisprimary "
                                                          "    And NOT Exists(Select * 
From pg_class c Where c.oid = i.indexrelid)",
                                                          tblinfo[i].oid, 
tblinfo[i].oid);
***************
*** 2343,2349 ****
                                appendPQExpBuffer(query,
                                                          "SELECT c.relname "
                                                          "FROM pg_index i LEFT OUTER 
JOIN pg_class c ON c.oid = i.indexrelid "
!                                                         "WHERE i.indrelid = %s"
                                                          "AND   i.indisprimary ",
                                                          tblinfo[i].oid);
                        }
--- 2343,2349 ----
                                appendPQExpBuffer(query,
                                                          "SELECT c.relname "
                                                          "FROM pg_index i LEFT OUTER 
JOIN pg_class c ON c.oid = i.indexrelid "
!                                                         "WHERE i.indrelid = oid(%s)"
                                                          "AND   i.indisprimary ",
                                                          tblinfo[i].oid);
                        }
***************
*** 3035,3040 ****
--- 3035,3041 ----
        query = createPQExpBuffer();
        appendPQExpBuffer(query, "SELECT description FROM pg_description WHERE objoid 
= ");
        appendPQExpBuffer(query, oid);
+       appendPQExpBuffer(query, "::oid");
  
        /*** Execute query ***/
  
***************
*** 3394,3400 ****
  
        /* becomeUser(fout, finfo[i].usename); */
  
!       sprintf(query, "SELECT lanname FROM pg_language WHERE oid = %u",
                        finfo[i].lang);
        res = PQexec(g_conn, query);
        if (!res ||
--- 3395,3401 ----
  
        /* becomeUser(fout, finfo[i].usename); */
  
!       sprintf(query, "SELECT lanname FROM pg_language WHERE oid = oid(%u)",
                        finfo[i].lang);
        res = PQexec(g_conn, query);
        if (!res ||
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to