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

Windows10下PostgreSQL11执行plpython3u函数触发服务崩溃报错

故障现象
  • 运行环境:Windows 10 操作系统、PostgreSQL 11 数据库、Python 3.7(版本匹配PostgreSQL 11官方文档对plpython3u的版本要求)
  • 前置操作:已执行CREATE EXTENSION plpython3u;完成扩展创建,已配置相关环境变量
  • 故障表现:执行任意指定LANGUAGE plpython3u的查询时,数据库服务直接崩溃;客户端弹出连接丢失提示,内容为「应用已丢失数据库连接,可能原因包括:空闲连接被强制断开、应用服务器或数据库服务器被重启、用户会话超时,询问是否继续并建立新会话」
  • 测试用函数创建语句:
CREATE OR REPLACE FUNCTION func(
    file_name character varying)
  RETURNS text AS
$BODY$
  return "aa"
$BODY$
  LANGUAGE plpython3u VOLATILE
  COST 100;
  • 日志核心报错信息:
Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
服务进程(PID 3592)因0xC0000409异常被终止
故障根因

报错No module named 'encodings'是Python解释器启动阶段无法加载标准库文件导致的。Windows环境下PostgreSQL默认以系统服务身份运行,默认不会读取当前登录用户的用户级环境变量,plpython3u扩展加载时调用的Python 3.7运行时拿不到正确的安装路径,找不到标准库下的encodings模块触发致命初始化错误,最终导致Postgres服务进程异常终止,抛出0xC0000409异常。

修复步骤
  1. 先确认本地Python 3.7的实际安装路径,默认路径一般为C:\Python37,打开该路径确认存在Lib\encodings目录,且目录内文件完整无缺失。如果安装Python时选择了「仅为当前用户安装」,建议先重装Python,选择「为所有用户安装」,避免后续权限问题。
  2. 打开Windows系统环境变量配置面板(此电脑右键-属性-高级系统设置-环境变量-系统变量),新增/修改以下系统级配置:
    • 新增系统变量,变量名填PYTHONHOME,变量值填Python 3.7的安装根目录(比如C:\Python37)
    • 编辑系统变量Path,新增两个条目:C:\Python37、C:\Python37\DLLs
  3. 按下Win+R输入services.msc打开服务管理器,找到postgresql-x64-11服务,右键选择重启,等待服务完全启动。
  4. 重新连接数据库,执行之前的函数创建语句,再调用select func('test');做验证,正常返回aa即为修复完成。

注意:如果配置完环境变量重启服务后仍然报相同错误,右键Python 3.7安装根目录,打开「属性-安全」选项卡,给LOCAL SERVICE、NETWORK SERVICE两个系统账户添加读取、读取和执行、列出文件夹内容的权限,避免服务账户权限不足无法访问Python标准库文件。

内容的提问来源于stack exchange,提问作者эдик ерошов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:18:20