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

为何speech_recognition在命令行正常却在PostgreSQL plpython3u中报错

错误原因

该报错的根本原因是谷歌speech_recognition库在调用语音识别接口前,需要先将音频文件转换为FLAC格式,该过程依赖系统安装的flac命令行工具。PostgreSQL的plpython3u运行环境使用的是postgres用户的环境变量,其PATH路径中没有包含flac工具的安装位置,导致库中查找工具的shutil.which()方法返回None,后续代码尝试对None调用split方法就触发了该空属性异常。
你在命令行运行正常是因为登录用户的PATH环境变量已经包含了flac的安装路径,和postgres用户的环境配置不一致。

解决步骤
  1. 首先登录服务器命令行,执行以下命令确认flac工具的实际安装路径:
    which flac
    执行后会返回路径,常见值为/usr/bin/flac或/usr/local/bin/flac,记下来备用。
  2. 选择以下任意一种方案修复即可:

方案1:修改函数代码手动指定工具路径(推荐,无需改动数据库全局配置)

直接在你的plpython3u函数中添加一行代码,手动指定speech_recognition库使用的flac路径,修改后的函数代码如下:

CREATE OR REPLACE FUNCTION ivr.boot_action1_pyhon(name_file character varying)
 RETURNS character varying
 LANGUAGE plpython3u
AS $function$
import speech_recognition as sr
# 替换为你刚才查到的flac实际路径
sr.AudioFile.converter = "/usr/bin/flac"
r = sr.Recognizer()
with sr.AudioFile('/var/boot/pcm.wav') as source:
    a=r.record(source)
    tt=r.recognize_google(a)
return tt
$function$;

方案2:修改PostgreSQL服务的PATH环境变量

如果你有多个函数需要用到该工具,可以修改PostgreSQL的运行环境配置,将flac所在路径加到postgres用户的PATH中:

  • 对于systemd管理的PostgreSQL服务,新建配置文件/etc/systemd/system/postgresql@15-main.service.d/override.conf(路径中15要替换为你实际使用的PostgreSQL大版本号),写入以下内容:
[Service]
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  • 执行systemctl daemon-reload重载配置,再执行systemctl restart postgresql重启数据库服务即可生效。
  1. 额外检查:确认postgres用户对/var/boot/pcm.wav文件有读取权限,避免后续出现权限类报错。

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:15:01