From cfe443ab9d42b4ffe950608f01c3a4bdc2895c7b Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Tue, 24 Jan 2012 22:42:37 -0500
Subject: [PATCH] In pg_upgrade, when checking for the plpython library, we
 must check for "plpython2" when upgrading from pre-PG 9.1.  Patch to head and
 9.1.

Per report from Peter.
---
 contrib/pg_upgrade/function.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index 54f139a7988..4505e51a932 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -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);
-- 
GitLab