Обсуждение: How to control which Python interpreter Postgres uses?

Поиск
Список
Период
Сортировка

How to control which Python interpreter Postgres uses?

От
Ni Ne
Дата:
I have started writing PL/Python scripts on a CentOS 7 box running PG 11. The issue I have is that by default my PG instance wants to use python3.6 instead of version 3.9 which I would prefer. I can see this by running a simple PL/Python script that reports the version of Python being used.

Postgres was installed using yum:

```
$ sudo yum list installed | grep postgres
postgresql11.x86_64                   11.13-1PGDG.rhel7              @pgdg11
postgresql11-libs.x86_64              11.13-1PGDG.rhel7              @pgdg11
postgresql11-plpython3.x86_64         11.13-1PGDG.rhel7              @pgdg11
postgresql11-server.x86_64            11.13-1PGDG.rhel7              @pgdg11
```

I re-created the sym link for /usr/bin/python3 to point to /usr/local/bin/python3.9 however there is no change. It appears that the installation is hard-coded to point to /usr/bin/python3.6 as the Python interpreter.

How can I adjust my postgres settings to tell it which Python interpreter binary to use?

Thanks!

-nine

Re: How to control which Python interpreter Postgres uses?

От
Tom Lane
Дата:
Ni Ne <nineoften@hotmail.com> writes:
> How can I adjust my postgres settings to tell it which Python interpreter binary to use?

You'd have to recompile plpython against the particular libpython
you want to use.

            regards, tom lane



Re: How to control which Python interpreter Postgres uses?

От
Ni Ne
Дата:
Would I recompile the plpython package or postgres itself?


From: Tom Lane <tgl@sss.pgh.pa.us>
Sent: Monday, November 1, 2021 4:03 PM
To: Ni Ne <nineoften@hotmail.com>
Cc: pgsql-admin@lists.postgresql.org <pgsql-admin@lists.postgresql.org>
Subject: Re: How to control which Python interpreter Postgres uses?
 
Ni Ne <nineoften@hotmail.com> writes:
> How can I adjust my postgres settings to tell it which Python interpreter binary to use?

You'd have to recompile plpython against the particular libpython
you want to use.

                        regards, tom lane

Re: How to control which Python interpreter Postgres uses?

От
Wells Oliver
Дата:
Apologies if I'm misunderstanding, but you can specify a virtual env (so any interpreter) as we did here:

CREATE FUNCTION slack (msg text)
    RETURNS boolean
AS $$
    hook = 'https://...'
    activate_this = '/opt/python/env/bin/activate_this.py'
    exec(open(activate_this).read(), dict(__file__=activate_this))
    from slack_sdk.webhook import WebhookClient
    import ssl
    ssl_context = ssl.create_default_context()
    ssl_context.check_hostname = False
    ssl_context.verify_mode = ssl.CERT_NONE
    webhook = WebhookClient(hook, ssl=ssl_context)
    webhook.send(text=msg)
    return True
$$ LANGUAGE plpython3u;




On Mon, Nov 1, 2021 at 3:06 PM Ni Ne <nineoften@hotmail.com> wrote:
Would I recompile the plpython package or postgres itself?


From: Tom Lane <tgl@sss.pgh.pa.us>
Sent: Monday, November 1, 2021 4:03 PM
To: Ni Ne <nineoften@hotmail.com>
Cc: pgsql-admin@lists.postgresql.org <pgsql-admin@lists.postgresql.org>
Subject: Re: How to control which Python interpreter Postgres uses?
 
Ni Ne <nineoften@hotmail.com> writes:
> How can I adjust my postgres settings to tell it which Python interpreter binary to use?

You'd have to recompile plpython against the particular libpython
you want to use.

                        regards, tom lane


--

Re: How to control which Python interpreter Postgres uses?

От
Ni Ne
Дата:
We haven't moved to venvs yet here, so was trying to override the default Python interpreter file that postgre will use.

I did some more research and I can't see any way to adjust this behavior without compiling postgres from source, as Tom mentioned.

Here is an article from someone else with the same problem as me, solved by supplying proper configure flags during compilation:




From: Wells Oliver <wells.oliver@gmail.com>
Sent: Monday, November 1, 2021 5:08 PM
To: Ni Ne <nineoften@hotmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>; pgsql-admin@lists.postgresql.org <pgsql-admin@lists.postgresql.org>
Subject: Re: How to control which Python interpreter Postgres uses?
 
Apologies if I'm misunderstanding, but you can specify a virtual env (so any interpreter) as we did here:

CREATE FUNCTION slack (msg text)
    RETURNS boolean
AS $$
    hook = 'https://...'
    activate_this = '/opt/python/env/bin/activate_this.py'
    exec(open(activate_this).read(), dict(__file__=activate_this))
    from slack_sdk.webhook import WebhookClient
    import ssl
    ssl_context = ssl.create_default_context()
    ssl_context.check_hostname = False
    ssl_context.verify_mode = ssl.CERT_NONE
    webhook = WebhookClient(hook, ssl=ssl_context)
    webhook.send(text=msg)
    return True
$$ LANGUAGE plpython3u;




On Mon, Nov 1, 2021 at 3:06 PM Ni Ne <nineoften@hotmail.com> wrote:
Would I recompile the plpython package or postgres itself?


From: Tom Lane <tgl@sss.pgh.pa.us>
Sent: Monday, November 1, 2021 4:03 PM
To: Ni Ne <nineoften@hotmail.com>
Cc: pgsql-admin@lists.postgresql.org <pgsql-admin@lists.postgresql.org>
Subject: Re: How to control which Python interpreter Postgres uses?
 
Ni Ne <nineoften@hotmail.com> writes:
> How can I adjust my postgres settings to tell it which Python interpreter binary to use?

You'd have to recompile plpython against the particular libpython
you want to use.

                        regards, tom lane


--

Re: How to control which Python interpreter Postgres uses?

От
Ron
Дата:
Why would recompiling Python affect what Postgresql points to?

On 11/1/21 5:06 PM, Ni Ne wrote:
P {margin-top:0;margin-bottom:0;}
Would I recompile the plpython package or postgres itself?


From: Tom Lane <tgl@sss.pgh.pa.us>
Sent: Monday, November 1, 2021 4:03 PM
To: Ni Ne <nineoften@hotmail.com>
Cc: pgsql-admin@lists.postgresql.org <pgsql-admin@lists.postgresql.org>
Subject: Re: How to control which Python interpreter Postgres uses?
 
Ni Ne <nineoften@hotmail.com> writes:
> How can I adjust my postgres settings to tell it which Python interpreter binary to use?

You'd have to recompile plpython against the particular libpython
you want to use.

                        regards, tom lane

--
Angular momentum makes the world go 'round.

Re: How to control which Python interpreter Postgres uses?

От
Ilya Anfimov
Дата:
On Mon, Nov 01, 2021 at 08:52:27PM -0500, Ron wrote:
>    Why would recompiling Python affect what Postgresql points to?

 Not python, but plpython. The extension that adds python
as a server programming language to postgres.
> 
>    On 11/1/21 5:06 PM, Ni Ne wrote:
> 
>      Would I recompile the plpython package or postgres itself?
> 
>      ----------------------------------------------------------------------
> 
>      From: Tom Lane <tgl@sss.pgh.pa.us>
>      Sent: Monday, November 1, 2021 4:03 PM
>      To: Ni Ne <nineoften@hotmail.com>
>      Cc: pgsql-admin@lists.postgresql.org <pgsql-admin@lists.postgresql.org>
>      Subject: Re: How to control which Python interpreter Postgres uses?
>       
>      Ni Ne <nineoften@hotmail.com> writes:
>      > How can I adjust my postgres settings to tell it which Python
>      interpreter binary to use?
> 
>      You'd have to recompile plpython against the particular libpython
>      you want to use.
> 
>                              regards, tom lane
> 
>    --
>    Angular momentum makes the world go 'round.



Re: How to control which Python interpreter Postgres uses?

От
Ilya Anfimov
Дата:
On Mon, Nov 01, 2021 at 04:08:01PM -0700, Wells Oliver wrote:
>    Apologies if I'm misunderstanding, but you can specify a virtual env (so
>    any interpreter) as we did here:

 This  probably  wouldn't  allow access to the plpy server access
module. Only simplest stored procedures would  work  without  the
ability  to work with the database (and python version is usually
less of importance for such simple scripts).



>    CREATE FUNCTION slack (msg text)
>        RETURNS boolean
>    AS $$
>        hook = 'https://...'
>        activate_this = '/opt/python/env/bin/activate_this.py'
>        exec(open(activate_this).read(), dict(__file__=activate_this))
>        from slack_sdk.webhook import WebhookClient
>        import ssl
>        ssl_context = ssl.create_default_context()
>        ssl_context.check_hostname = False
>        ssl_context.verify_mode = ssl.CERT_NONE
>        webhook = WebhookClient(hook, ssl=ssl_context)
>        webhook.send(text=msg)
>        return True
>    $$ LANGUAGE plpython3u;
>    On Mon, Nov 1, 2021 at 3:06 PM Ni Ne <nineoften@hotmail.com> wrote:
> 
>      Would I recompile the plpython package or postgres itself?

[skipped]




Re: How to control which Python interpreter Postgres uses?

От
Laurenz Albe
Дата:
On Mon, 2021-11-01 at 22:06 +0000, Ni Ne wrote:
> Would I recompile the plpython package or postgres itself?

PL/Python is part of PostgreSQL itself, so yes, you'd have to
build that from source.

Yours,
Laurenz Albe
-- 
Cybertec | https://www.cybertec-postgresql.com