Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
In pg_upgrade, when checking for the plpython library, we must check for
authorBruce Momjian <bruce@momjian.us>
Wed, 25 Jan 2012 03:42:37 +0000 (22:42 -0500)
committerBruce Momjian <bruce@momjian.us>
Wed, 25 Jan 2012 03:42:37 +0000 (22:42 -0500)
"plpython2" when upgrading from pre-PG 9.1.  Patch to head and 9.1.

Per report from Peter.

contrib/pg_upgrade/function.c

index 54f139a7988be95fa5903562d47a2488765baf4d..4505e51a932eb279277dc95bc3f89b32cfc3c037 100644 (file)
@@ -228,8 +228,24 @@ check_loadable_libraries(void)
        char       *cmd = (char *) pg_malloc(8 + 2 * llen + 1);
        PGresult   *res;
 
+       /*
+        *  In Postgres 9.0, Python 3 support was added, and to do that, a
+        *  plpython2u language was created with library name plpython2.so
+        *  as a symbolic link to plpython.so.  In Postgres 9.1, only the
+        *  plpython2.so library was created, and both plpythonu and
+        *  plpython2u pointing to it.  For this reason, any reference to
+        *  library name "plpython" in an old PG <= 9.1 cluster must look
+        *  for "plpython2" in the new cluster.
+        */
+       if (GET_MAJOR_VERSION(old_cluster.major_version) < 901 &&
+           strcmp(lib, "$libdir/plpython") == 0)
+       {
+           lib = "$libdir/plpython2";
+           llen = strlen(lib);
+       }
+
        strcpy(cmd, "LOAD '");
-       PQescapeStringConn(conn, cmd + 6, lib, llen, NULL);
+       PQescapeStringConn(conn, cmd + strlen(cmd), lib, llen, NULL);
        strcat(cmd, "'");
 
        res = PQexec(conn, cmd);