psycopg2提示SCRAM认证需libpq10及以上,已装12.8仍报错如何解决?
问题原因
- psycopg2-binary包默认内置了静态编译的libpq库,不会优先调用系统安装的libpq。你使用的2.9.1版本内置的libpq版本低于10,因此触发SCRAM认证报错。
- 修改PostgreSQL认证方式后未生效,是因为仅修改配置文件不会变更已存储的用户密码哈希算法:原有用户密码仍是SCRAM格式,即使配置改为md5,认证逻辑依然不匹配。
排查验证
先执行以下命令确认psycopg2实际调用的libpq版本:
python -c "import psycopg2; print(psycopg2.__libpq_version__)"
如果输出值小于100000,即可确认是psycopg2使用了低于10版本的libpq导致的问题。
解决方案
你可以根据自己的需求选择任意一种方案:
- 方案1:替换为源码编译的psycopg2,调用系统已安装的高版本libpq
先安装编译依赖:
卸载原有psycopg2相关包:sudo apt install -y libpq-dev python3-dev
重新安装源码编译版本:pip uninstall -y psycopg2-binary psycopg2pip install psycopg2 - 方案2:直接升级psycopg2-binary到高版本
2.9.3及以上版本的psycopg2-binary内置的libpq版本已高于10,直接执行升级即可:pip install --upgrade psycopg2-binary>=2.9.3 - 方案3:完全适配MD5认证(如需保留当前版本的psycopg2-binary)
- 确认postgresql.conf中配置为
password_encryption = md5,pg_hba.conf中对应应用连接来源的行认证方式设置为md5 - 重启PostgreSQL服务
- 登录PostgreSQL终端,重新设置对应用户的密码,触发MD5格式哈希生成:
ALTER USER 你的数据库用户名 WITH PASSWORD '你的数据库密码'; - 确认postgresql.conf中配置为
内容的提问来源于stack exchange,提问作者David Co
相关产品推荐
相关产品推荐

