Re: Resolving the python 2 -> python 3 mess - Mailing list pgsql-hackers

From Jesse Zhang
Subject Re: Resolving the python 2 -> python 3 mess
Date
Msg-id CAGf+fX5pmU9Szt6TE6yKcnRNwBORSSwU8ueDK8x++R1Bmn1WVw@mail.gmail.com
Whole thread Raw
In response to Resolving the python 2 -> python 3 mess  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Resolving the python 2 -> python 3 mess
List pgsql-hackers
Hi Tom,

I really like the "stub .so" idea, but feel pretty uncomfortable for the
"transparent" upgrade. Response inlined.

On Mon, Feb 17, 2020 at 8:49 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> 2. On platforms where Python 2.x is no longer supported, transparently
> map plpythonu and plpython2u to plpython3u.  "Transparent" meaning that
> dump/reload or pg_upgrade of existing plpythonu/plpython2u functions
> will work, but when you run them, what you actually get is Python 3.x.

It's fair enough that plpythonu changes its meaning, people who really
want the stability should explicitly use plpython2u.

>
> For existing functions that don't use any obsolete Python syntax
> (which one would hope is a pretty large percentage), this is a
> zero-effort conversion for users.  If a function does use obsolete
> constructs, it will get a parse failure when executed, and the user
> will have to update it to Python 3 syntax.  I propose that we make
> that case reasonably painless by providing the conversion script
> I posted in [3] (or another one if somebody's got a better one),
> bundled as a separately-installable extension.
>
> A possible gotcha in this approach is if there are any python 2/3
> incompatibilities that would not manifest as syntax errors or
> obvious runtime errors, but would allow old code to execute and
> silently do the wrong thing.  One would hope that the Python crowd
> weren't dumb enough to do that, but I don't know whether it's true.
> If there are nasty cases like that, maybe what we have to do is allow
> plpythonu/plpython2u functions to be dumped and reloaded into a
> python-3-only install, but refuse to execute them until they've
> been converted.

"True division", one of the very first (2011, awww) few breaking changes
introduced in Python 3 [1], comes to mind. While it's not the worst
incompatibilities between Python 2 and 3, it's bad enough to give pause
to the notion that a successful parsing implies successful conversion.

[1] https://www.python.org/dev/peps/pep-0238/

Cheers,
Jesse



pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: more ALTER .. DEPENDS ON EXTENSION fixes
Next
From: Alvaro Herrera
Date:
Subject: Re: Error on failed COMMIT