The*_*ror 13 python postgresql psycopg2
我正在使用 Macbook
Psycopg2 在连接 localhost db(Mac 上的 PostgreSQL)时运行良好。当我尝试在 Windows10 上连接 PostgreSQL 数据库时出现错误。
以下代码是我用于连接的代码,主机只是windows10的IP
db= psycopg2.connect(database='dbname',user='username',password="secret",host="192.168.3.9",port="5432")
Run Code Online (Sandbox Code Playgroud)
错误:
File "path/to/psycopg2/__init__.py", line 126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: unsupported frontend protocol 1234.5679: server supports 2.0 to 3.0
Run Code Online (Sandbox Code Playgroud)
这是因为系统兼容性还是其他原因?我试过其他 Windows 机器,但没有运气让它工作。但是,当我使用Node.JS 模块 pg 时,我能够在 Windows 上连接 PostgreSQL
Lau*_*lbe 19
1234.5679是客户端发送的用于请求 SSL 加密数据库连接的特殊代码,自1999年提交 e0e7daef6da以来,PostgreSQL 一直支持该代码。但是您的 PostgreSQL 不能那么旧,因为在 2003 年之前没有添加对协议版本 3.0 的支持。
其实,通过研究src/backend/postmaster/postmaster.c和阅读邮件列表,这是PostgreSQL服务器上的一个错误:
客户端必须配置为尝试 GSS 身份验证,当服务器拒绝时,它想要协商 SSL 连接,但此时服务器并不期望;因此错误。
请参阅此处的讨论。该错误已在 12.3 版中修复。
解决方法是在客户端上禁用 GSS 身份验证或 SSL 协商。
在 psycopg2 中,禁用 SSL 是通过sslmode="disable"在连接字符串中使用来完成的,而禁用 GSS 是使用gssencmode="disable". 有关详细信息,请参阅文档。
小智 5
使用 Laravel 和 Postgres 时遇到类似的错误。通过将其放入我的 .env 文件中解决了这个问题:PGGSSENCMODE=disable
将?gssencmode=disable添加到连接字符串对我有用:
import pyodbc
from sqlalchemy import create_engine
engine = create_engine(f'postgresql://{user}:{password}@localhost:5432/database_name?gssencmode=disable')
Run Code Online (Sandbox Code Playgroud)