如何控制plpython3使用哪个Python版本?

ref*_*llo 5 plpython python-3.9

我有一个在 CentOS 7 上运行的 postgres 11 数据库,并尝试使用 PL/python,但需要指向 python 解释器的特定版本。我需要使用python3.9,而它正在使用python3.6。我目前无法卸载 python3.6,因此希望以某种方式将 plpython3 指向我的 python3.9 解释器。

我已经安装了包 postgresql-plpython3:

sudo yum install -y postgresql-plpython3

我在 PG 中创建了一个扩展,可以运行一个简单的 PL/python 函数来报告所使用的版本:

CREATE OR REPLACE FUNCTION pyver ()
RETURNS TEXT
AS $$
    import sys
    pyversion = sys.version
    return pyversion
$$ LANGUAGE 'plpython3u';
Run Code Online (Sandbox Code Playgroud)

执行它会返回:

# select pyver();
                  pyver
-----------------------------------------
 3.6.8 (default, Nov 16 2020, 16:55:22) +
 [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
(1 row)
Run Code Online (Sandbox Code Playgroud)

在我的操作系统上,我有以下 python 解释器文件及其使用的版本:

$ /usr/bin/python3 --version
Python 3.9.6

$ python3 --version
Python 3.9.6

$ python3.6 --version
Python 3.6.8
Run Code Online (Sandbox Code Playgroud)

plpython3 模块中的某些内容似乎是硬编码的以指向我的 python3.6 版本。

sha*_*adi 1

postgresql 使用嵌入式python 解释器,如此处所述。更改它需要重新编译 pl/python 扩展(据我所知)。这里的编译说明显示了相关位:选项--with-python和环境变量PYTHON