如何控制plpython3使用的Python版本?CentOS7下PostgreSQL11指定Python3.9
CentOS 7下PostgreSQL 11修改plpython3绑定Python3.9的操作步骤
原因说明:yum源预装的postgresql11-plpython3包在编译时默认链接了CentOS 7系统内置的libpython3.6m.so,修改系统默认python3软链接不会生效,需重新编译plpython3扩展绑定Python3.9动态库。
前置准备
安装必要依赖包:
# 需确保你安装的Python3.9对应开发包已存在,如使用第三方源安装的Python3.9则安装对应版本的devel包,源码编译的Python3.9需提前开启--enable-shared参数编译 sudo yum install -y python39-devel postgresql11-devel
操作步骤
- 卸载原有预编译的plpython3包
sudo yum remove -y postgresql11-plpython3
- 编译适配Python3.9的plpython3扩展
- 下载和当前运行的PostgreSQL11小版本完全一致的源码包,解压后进入源码内的
contrib/plpython目录 - 执行以下编译安装命令:
make PYTHON=/usr/bin/python3.9 PG_CONFIG=/usr/pgsql-11/bin/pg_config sudo make install PYTHON=/usr/bin/python3.9 PG_CONFIG=/usr/pgsql-11/bin/pg_config
- 验证扩展动态库链接是否正确
ldd /usr/pgsql-11/lib/plpython3.so | grep libpython
输出结果显示关联libpython3.9.so即为成功。
- 重启PostgreSQL服务并重建扩展
sudo systemctl restart postgresql-11
进入PostgreSQL命令行执行以下SQL:
-- 先删除原有扩展,依赖该扩展的函数会同步删除,请提前备份 DROP EXTENSION IF EXISTS plpython3u CASCADE; CREATE EXTENSION plpython3u;
- 测试Python版本
执行你提供的pyver()函数,返回结果会显示为Python3.9版本。
注意事项
- 后续升级PostgreSQL11小版本后,需重新编译一次plpython3扩展,避免版本不兼容
- 如使用源码编译的Python3.9,需确保编译时添加了
--enable-shared参数,否则会缺少动态库导致plpython编译失败
内容的提问来源于stack exchange,提问作者refriedjello
相关产品推荐
相关产品推荐

