Re: pg_upgrade Python version issue on openSUSE - Mailing list pgsql-general

From Adrian Klaver
Subject Re: pg_upgrade Python version issue on openSUSE
Date
Msg-id fae9ca78-6ffe-07a1-cf07-484a39e4b18b@aklaver.com
Whole thread Raw
In response to Re: pg_upgrade Python version issue on openSUSE  (Adrian Klaver <adrian.klaver@aklaver.com>)
List pgsql-general
On 9/26/20 8:07 AM, Adrian Klaver wrote:
> On 9/26/20 7:49 AM, Tom Lane wrote:
>> =?utf-8?Q?Paul_F=C3=B6rster?= <paul.foerster@gmail.com> writes:
>>> On 26. Sep, 2020, at 16:07, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>>>> However, I don't understand how "drop extension plpythonu"
>>>> worked for you, given your previous query showing that
>>>> that extension wasn't installed.
>>
>>> just checked with another 12.4. It's the same:
>>
>>> postgres=# select * from pg_available_extension_versions where 
>>> installed;
>>>    name   | version | installed | superuser | relocatable |   
>>> schema   | requires |                           comment
>>>
---------+---------+-----------+-----------+-------------+------------+----------+--------------------------------------------------------------

>>>
>>>   plperlu | 1.0     | t         | t         | f           | 
>>> pg_catalog |          | PL/PerlU untrusted procedural language
>>>   dblink  | 1.2     | t         | t         | t           
>>> |            |          | connect to other PostgreSQL databases from 
>>> within a database
>>>   plpgsql | 1.0     | t         | f         | f           | 
>>> pg_catalog |          | PL/pgSQL procedural language
>>>   plperl  | 1.0     | t         | f         | f           | 
>>> pg_catalog |          | PL/Perl procedural language
>>> (4 rows)
>>
>>> postgres=# drop extension plpythonu ;
>>> DROP EXTENSION
>>> postgres=# create extension plpython3u ;
>>> CREATE EXTENSION
>>
>> Actually, now that I think about it, you're querying the wrong view.
>> I'm too lazy to check the source code right now, but I'm pretty sure
>> that pg_available_extension_versions is mostly driven off what control
>> files exist in the on-disk libdir.  But that may have little to do with
>> what's in the system catalogs.  You should have checked pg_extension,
>> or just "\dx" in psql.
> 
> I believe the issue is here:
> 
> select * from pg_pltemplate ;
> 
> 
>   plpythonu  | f           | f             | plpython_call_handler  | 
> plpython_inline_handler  | plpython_validator  | $libdir/plpython2 | NULL
>   plpython2u | f           | f             | plpython2_call_handler | 
> plpython2_inline_handler | plpython2_validator | $libdir/plpython2 | NULL
>   plpython3u | f           | f             | plpython3_call_handler | 
> plpython3_inline_handler | plpython3_validator | $libdir/plpython3 | NULL
> 


Some digging in the pg_upgrade code(function.c) proved the above wrong. 
Turns out pg_upgrade uses information from pg_proc.
> 
> The default plpython is plpythonu and that points at $libdir/plpython2.
> 
> The instructions here:
> 
> https://www.postgresql.org/docs/12/plpython-python23.html
> 
> offer a work around:
> 
> "Daredevils, who want to build a Python-3-only operating system 
> environment, can change the contents of pg_pltemplate to make plpythonu 
> be equivalent to plpython3u, keeping in mind that this would make their 
> installation incompatible with most of the rest of the world."
> 
> 
>>
>>             regards, tom lane
>>
>>
> 
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com



pgsql-general by date:

Previous
From: Paul Förster
Date:
Subject: Re: pg_upgrade Python version issue on openSUSE
Next
From: Adrian Klaver
Date:
Subject: Re: pg_upgrade Python version issue on openSUSE