You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-16
    
    CREATE 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-16
    
    DROP 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:10:03