Making plpython 2 and 3 coexist a bit better

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Making plpython 2 and 3 coexist a bit better
Дата
Msg-id 13858.1452527082@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: Making plpython 2 and 3 coexist a bit better  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Making plpython 2 and 3 coexist a bit better  (Bruce Momjian <bruce@momjian.us>)
Список pgsql-hackers
Commit 803716013dc1350f installed a safeguard against loading plpython2
and plpython3 at the same time, stating

+   It is not allowed to use PL/Python based on Python 2 and PL/Python
+   based on Python 3 in the same session, because the symbols in the
+   dynamic modules would clash, which could result in crashes of the
+   PostgreSQL server process.  There is a check that prevents mixing
+   Python major versions in a session, which will abort the session if
+   a mismatch is detected.  It is possible, however, to use both
+   PL/Python variants in the same database, from separate sessions.

It turns out though that the freedom promised in the last sentence
is fairly illusory, because if you have functions in both languages
in one DB and you try a dump-and-restore, it will fail.

But it gets worse: a report today in pgsql-general points out that
even if you have the two languages in use *in different databases*,
pg_upgrade will fail, because pg_upgrade rather overenthusiastically
loads every .so mentioned anywhere in the source installation into
one session.

I think we might be able to improve this if we don't do the check in
plpython's _PG_init(), but delay it until we have a need to call into
libpython; which we could skip doing at _PG_init() time, at the cost
of perhaps one more flag check per plpython function call to see if
we've initialized libpython yet.

The behavior would then be that if you load both language .so's
into one session, neither one would be willing to do anything
anymore --- not run a function, and not syntax-check one either,
because any attempted call into either libpython might crash.
But restoring a dump has no need to do either of those things;
it just wants to be able to LOAD the .so.  Also, the error for
not being able to do something wouldn't have to be FATAL.

Comments?  Am I being too optimistic about whether it's safe to
have both libpythons loaded if we're not calling either of them?

(If I am, we should at least try to improve pg_upgrade so that
it's not imposing a greater restriction than anything else in
the system.)
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: 2016-01 Commitfest
Следующее
От: "Joshua D. Drake"
Дата:
Сообщение: Re: No Issue Tracker - Say it Ain't So!