使用psycopg2连接AWS PostgreSQL遇SCRAM认证错误求助
问题:psycopg2连接PostgreSQL触发SCRAM认证版本错误
报错信息
执行连接代码:
>>> c = psycopg2.connect(dbname="test", user="user", password="***", host="HOSTNAME")
触发如下回溯:
Traceback (most recent call last): File "<console>", line 1, in <module> File "/var/app/venv/staging-LQM1lest/lib64/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above
环境信息
- 操作系统:Amazon Linux 2
- Python版本:3.8.16
- 系统已安装libpq版本:
libpq.aarch64 14.3-2.amzn2.0.2(通过yum list installed确认)
解决方案
核心原因
系统虽安装了高版本libpq,但当前psycopg2绑定的是旧版本libpq库,导致不支持SCRAM认证。
解决步骤
确认psycopg2绑定的libpq版本
运行以下代码检查版本:import psycopg2 print("psycopg2内置libpq版本:", psycopg2.__libpq_version__) print("系统链接的libpq版本:", psycopg2.extensions.libpq_version())若输出版本低于10,说明绑定了旧库。
重新编译安装psycopg2
先卸载现有psycopg2包:pip uninstall psycopg2 psycopg2-binary -y设置环境变量指向PostgreSQL 14的库和头文件目录,再编译安装:
export PATH=/usr/pgsql-14/bin:$PATH export LD_LIBRARY_PATH=/usr/pgsql-14/lib:$LD_LIBRARY_PATH export CFLAGS="-I/usr/pgsql-14/include" export LDFLAGS="-L/usr/pgsql-14/lib" pip install psycopg2 --no-binary :all:验证连接
重新执行连接代码,确认是否成功建立连接。
替代方案
若编译安装有困难,可尝试安装最新版psycopg2-binary,它内置了兼容SCRAM的libpq:
pip install --upgrade psycopg2-binary
内容的提问来源于stack exchange,提问作者Peter Fankhänel
相关产品推荐
相关产品推荐

