On Fri, Jan 20, 2012 at 07:01:46AM +0200, Peter Eisentraut wrote: > On tor, 2012-01-19 at 17:04 -0500, Bruce Momjian wrote: > > For that reason, I wonder if I should just hard-code the plpython > > rename into the pg_upgrade test in check_loadable_libraries(). > > Yes, I haven't come up with a better solution either. > > If this becomes a general problem, we might need to add a command line > option to ignore certain names or something. But not yet.
Well, the problem is a little more complex than reported. It turns out in PG 9.0 we kept the plpython.so file and symlinked plpython2.so to it. In PG 9.1, we removed plpython.so, and only have plpython2.so, so the problem is with PG >= 9.1, and does not affect 9.0, which explains why we didn't get any 9.0 reports of a problem. I have applied the attached patch to PG head and 9.1 to fix the library checking problem. -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + It's impossible for everything to be true. +
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c new file mode 100644 index 54f139a..4505e51 *** a/contrib/pg_upgrade/function.c --- b/contrib/pg_upgrade/function.c *************** check_loadable_libraries(void) *** 228,235 **** char *cmd = (char *) pg_malloc(8 + 2 * llen + 1); PGresult *res; strcpy(cmd, "LOAD '"); ! PQescapeStringConn(conn, cmd + 6, lib, llen, NULL); strcat(cmd, "'"); res = PQexec(conn, cmd); --- 228,251 ---- 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 + strlen(cmd), lib, llen, NULL); strcat(cmd, "'"); res = PQexec(conn, cmd);
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers