]> granicus.if.org Git - postgresql/commitdiff
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);