PostgreSQL中plpython3u扩展加载失败问题求助
问题描述
执行CREATE EXTENSION plpython3u时触发以下错误:
Erro SQL [58P01]: ERROR: could not load library "C:/Program Files/PostgreSQL/15/lib/plpython3.dll": unknown error 126
已确认plpython3.dll存在于指定目录,使用Windows 11系统,已安装对应版本Python、配置环境变量、按EDB文档安装语言包并设置PYTHONHOME为C:\edb\languagepack\v3\Python-3.10,通过DBeaver连接数据库,问题仍未解决。
可能的原因及解决步骤
Python版本与位数不匹配
PostgreSQL 15为64位版本,必须搭配64位Python 3.10(与EDB语言包版本一致),32位Python会直接导致DLL加载失败。同时确认Python安装时勾选了「Add Python to PATH」,且系统PATH中该Python路径优先级高于其他版本。EDB语言包与PostgreSQL版本不兼容
确保EDB语言包是针对PostgreSQL 15的专属版本,不同大版本(如14、15)的语言包无法混用,重新下载对应版本的语言包安装后重试。DLL依赖项缺失
错误126多数是因为plpython3.dll依赖的底层DLL未被找到,可通过Windows工具排查:- 打开命令提示符,进入
C:\Program Files\PostgreSQL\15\lib目录 - 执行命令:
dumpbin /dependents plpython3.dll(需安装Visual Studio工具链)
查看输出中是否有缺失的DLL(如python310.dll),若缺失,确认PYTHONHOME\DLLs目录已加入系统PATH,或临时将对应DLL复制到PostgreSQL的lib目录测试。
- 打开命令提示符,进入
PostgreSQL服务未读取更新后的环境变量
手动修改的PYTHONHOME和PATH环境变量不会自动同步到PostgreSQL服务的运行环境,需重启服务:- 按下Win+R输入
services.msc打开服务管理器 - 找到
postgresql-x64-15服务,右键选择「重启」 - 重新连接DBeaver执行扩展创建命令
- 按下Win+R输入
DBeaver环境变量隔离问题
DBeaver可能未读取到系统更新后的环境变量,或自定义了连接环境:- 完全关闭DBeaver后重新打开重试
- 使用PostgreSQL自带的psql工具执行
CREATE EXTENSION plpython3u,若成功则说明问题出在DBeaver,需检查连接设置中是否有自定义环境变量覆盖系统配置。
目录权限不足
确保PostgreSQL服务运行账户(默认是NT SERVICE\postgresql-x64-15)对C:\edb\languagepack\v3\Python-3.10目录拥有读取和执行权限:- 右键该目录选择「属性」→「安全」
- 添加
NT SERVICE\postgresql-x64-15账户,赋予读取和执行权限后应用。
内容的提问来源于stack exchange,提问作者Guilherme Rodrigues

