Postgres 16.2中plpython调用tabulate报错,如何切换Python版本?
强制PostgreSQL 16.2使用Python 3.9作为plpython3u解释器
前提确认
- 确保系统已安装Python 3.9及对应开发包
python39-devel,RHEL 8.9可通过AppStream仓库安装。 - 确认PostgreSQL 16.2的安装方式(源码编译/官方YUM源),不同方式对应不同配置方法。
方法一:源码编译重新绑定Python 3.9
如果你的PostgreSQL是源码编译安装的,按以下步骤操作:
- 先卸载现有plpython3u扩展:
DROP EXTENSION plpython3u; - 停止PostgreSQL服务:
systemctl stop postgresql-16 - 进入原编译源码目录,重新配置编译参数,指定Python 3.9路径:
注意:./configure --prefix=/usr/pgsql-16 --with-python PYTHON=/usr/bin/python3.9/usr/bin/python3.9是Python3.9的实际可执行路径,--prefix要和原安装路径保持一致 - 编译并安装:
make make install - 启动服务并重新创建plpython3u扩展:
systemctl start postgresql-16CREATE EXTENSION plpython3u;
方法二:通过官方YUM源安装Python3.9绑定包
如果是用PostgreSQL官方YUM源安装的,直接替换对应包即可:
- 查找是否有Python3.9版本的plpython包:
dnf search postgresql16-plpython39 - 卸载旧的Python3.6绑定包:
dnf remove postgresql16-plpython3 - 安装Python3.9版本的plpython包:
dnf install postgresql16-plpython39 - 重启服务并重新创建扩展:
systemctl restart postgresql-16DROP EXTENSION IF EXISTS plpython3u; CREATE EXTENSION plpython3u;
验证配置结果
创建测试函数查看当前Python版本:
CREATE OR REPLACE FUNCTION test_python_version() RETURNS text AS $$ import sys return sys.version $$ LANGUAGE plpython3u; SELECT test_python_version();
执行后返回Python3.9的版本信息,说明配置成功,此时再调用带colalign参数的tabulate函数就不会触发TypeError了。
内容的提问来源于stack exchange,提问作者Misudka
相关产品推荐
相关产品推荐

