Python psycopg2 SCRAM 身份验证

Dav*_* Co 8 python postgresql psycopg2

我正在尝试运行一个使用 psycopg2-binary==2.9.1 的 python 应用程序,但遇到此错误:

psycopg2.OperationalError: SCRAM authentication requires libpq version 10 or above
Run Code Online (Sandbox Code Playgroud)

当我检查安装的 libpq 版本时,它表明我有 12.8:

sudo dpkg -l | grep libpq
ii  libpq5:arm64                       12.8-0ubuntu0.20.04.1             arm64        PostgreSQL C client library
Run Code Online (Sandbox Code Playgroud)

我四处搜索并看到一些关闭 scram 身份验证的建议,因此我将 pg_hba.conf 和 postgresql.conf 中的身份验证更改为 md5,然后重新加载配置(并重新启动我的数据库)。

我仍然遇到这个问题。有谁知道出了什么问题?提前致谢

Jih*_*Lee 12

我使用的是苹果硅(M1 Pro)。

在我的环境(docker 上的 python debian 映像)中,解决方案是升级 libpq 并安装构建工具,然后从源代码构建 psycopg2-binary。

ubuntu示例代码:

sudo apt update -y && sudo apt install -y build-essential libpq-dev
pip install psycopg2-binary --no-binary psycopg2-binary
Run Code Online (Sandbox Code Playgroud)

  • 为什么不直接使用“pip install psycopg2”呢?我相信这是该包的非二进制版本? (5认同)

小智 5

我的 arm64 版本也有同样的问题。当我基于Python3(Debian)构建Docker容器时。如果我为arm64构建,我发现它将安装libpq版本9

WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
Python 3.10.0 (default, Nov 18 2021, 00:02:14) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2 
>>> print(psycopg2.__libpq_version__)
90623
>>> print(psycopg2.extensions.libpq_version())
90623
>>> 
Run Code Online (Sandbox Code Playgroud)

但如果我在 amd64 CPU 上构建完全相同的 dockerfile,我会安装不同的版本。

Python 3.10.0 (default, Nov 17 2021, 15:26:39) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> print(psycopg2.__libpq_version__)
130003
>>> print(psycopg2.extensions.libpq_version())
130003
Run Code Online (Sandbox Code Playgroud)

我也尝试过python:3-alpinearm64并获得了更好的结果。

WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
/src # python
Python 3.10.0 (default, Nov 30 2021, 00:28:27) [GCC 10.3.1 20211027] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
>>> print(psycopg2.__libpq_version__)
140001
>>> print(psycopg2.extensions.libpq_version())
140001
>>> 
Run Code Online (Sandbox Code Playgroud)

所以我猜问题是 Debian/Ubuntu 正在使用的存储库。也许您应该向 Debian 和 Ubuntu 开一张票来更新适用于 arm64 的 Postgresql 客户端的软件包。


Lau*_*lbe 1

您的计算机上必须有 libpq 的第二个副本,并且 psycopg 正在使用该副本。识别该文件并删除或升级它。也许这需要更新 psycopg。