pgAdmin4连接PostgreSQL报SCRAM认证需libpq10以上问题求助
故障原因
报错核心是pgAdmin运行时实际加载的libpq版本低于10,和系统全局安装的libpq-dev版本没有关系。你用Python虚拟环境部署pgAdmin时,虚拟环境内默认安装的psycopg2-binary依赖会捆绑自带旧版本libpq,不会调用系统全局安装的新版库。另外你修改PostgreSQL认证配置后没有重载服务、没有重设用户密码哈希,也会导致md5认证配置不生效。
解决步骤
- 校验并生效PostgreSQL配置
先确认两个配置文件的参数修改正确:- 编辑
postgresql.conf,确保password_encryption = md5,删除该行开头的注释符# - 编辑
pg_hba.conf,将本地IPv4、IPv6连接规则对应的认证METHOD字段值改为md5,删除所有指向scram-sha-256的配置 - 执行命令重载数据库配置,无需重启数据库实例:
sudo systemctl reload postgresql
- 编辑
- 重置数据库用户密码
修改加密方式后,已有用户的密码哈希仍然是SCRAM-SHA-256格式存储的,必须重设密码才会生成对应md5格式的哈希值:- 切换到postgres系统用户:
sudo su - postgres - 进入PostgreSQL命令行控制台:
psql - 执行密码重置语句,将
db_user替换为你实际用来连接的数据库用户名(默认管理员用户为postgres),密码替换为你自己设置的连接密码:ALTER USER db_user WITH PASSWORD '你的数据库连接密码'; - 输入
\q退出psql控制台,再输入exit退回普通系统用户
- 切换到postgres系统用户:
- 修复虚拟环境内的依赖问题
这是之前操作遗漏的核心环节:- 激活你用来运行pgAdmin的Python虚拟环境
- 卸载捆绑旧libpq的二进制依赖包:
pip uninstall -y psycopg2-binary - 安装基于系统本地库编译的psycopg2版本,该版本会直接调用你系统上安装的v14版libpq:
pip install psycopg2
如果执行安装时提示编译错误,先安装系统编译依赖:sudo apt install python3-dev build-essential libpq-dev,之后重新执行安装命令即可。
- 重启pgAdmin服务
结束之前运行的pgAdmin进程,在激活的虚拟环境内重新启动pgAdmin,再尝试新建服务器连接即可。
版本校验方式
重新连接前可以在激活的虚拟环境中执行以下命令,确认当前加载的libpq版本符合要求:
import psycopg2 print(psycopg2.__libpq_version__)
返回值大于等于100000即代表libpq版本满足SCRAM认证要求,不会再触发版本报错。
内容的提问来源于stack exchange,提问作者Seweryn
相关产品推荐
相关产品推荐

