On tis, 2010-07-06 at 18:15 -0400, Tom Lane wrote:
> At this point it seems clear to me that we've not adequately thought
> through the implications of having two python versions in one
> application namespace, and I'm not sure the Python people have either.
> I think we need to do something to block that from happening, at least
> until we have a plausible way to make it work.

How about this?

Index: src/pl/plpython/plpython.c
===================================================================
RCS file: /cvsroot/pgsql/src/pl/plpython/plpython.c,v
retrieving revision 1.145
diff -u -3 -p -r1.145 plpython.c
--- src/pl/plpython/plpython.c	29 Jun 2010 00:18:11 -0000	1.145
+++ src/pl/plpython/plpython.c	7 Jul 2010 21:04:33 -0000
@@ -3206,6 +3206,8 @@ PyInit_plpy(void)
 #endif
 
 
+static const int plpython_python_version = PY_MAJOR_VERSION;
+
 /*
  * _PG_init()			- library load-time initialization
  *
@@ -3216,6 +3218,21 @@ _PG_init(void)
 {
 	/* Be sure we do initialization only once (should be redundant now) */
 	static bool inited = false;
+	const int **version_ptr;
+
+	/* Be sure we don't run Python 2 and 3 in the same session (might crash) */
+	version_ptr = (const int **) find_rendezvous_variable("plpython_python_version");
+	if (!(*version_ptr))
+		*version_ptr = &plpython_python_version;
+	else
+	{
+		if (**version_ptr != plpython_python_version)
+			ereport(ERROR,
+					(errmsg("Python major version mismatch in session"),
+					 errdetail("This session had previously used Python major version %d, and it is now attempting to use Python major version %d.",
+							   **version_ptr, plpython_python_version),
+					 errhint("Start a new session to use a different Python major version.")));
+	}
 
 	if (inited)
 		return;
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to