我正在使用Macbook
当连接localhost db(在Mac上为PostgreSQL)时,Psycopg2可以很好地工作。当我尝试在Windows10上连接PostgreSQL数据库时,引发了错误。
以下代码是我用于连接的内容,主机只是Windows10的IP
db= psycopg2.connect(database='dbname',user='username',password="secret",host="192.168.3.9",port="5432")
错误:
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
这是因为系统兼容性还是其他原因?我尝试了其他Windows机器,但没有运气使其工作。但是,当我使用Node.JS模块pg时,我能够在Windows上连接PostgreSQL。
1234.5679是客户端发送的用于请求SSL加密数据库连接的特殊代码,自1999年提交e0e7daef6da以来,对它的支持就一直存在于PostgreSQL中。但是您的PostgreSQL不能这么老,因为在2003年之前未添加对协议版本3.0的支持。
1234.5679
实际上,通过研究src/backend/postmaster/postmaster.c和阅读邮件列表,这是PostgreSQL服务器上的错误:
src/backend/postmaster/postmaster.c
必须将客户端配置为尝试GSS身份验证,并且当服务器拒绝时,它希望协商SSL连接,但是服务器目前不希望这样做。因此错误。
请参阅此处的讨论。该错误已在版本12.3中修复。
解决方法是,在客户端上禁用GSS身份验证或SSL协商。
在psycopg2中,通过sslmode="disable"在连接字符串中使用来禁用SSL,而通过来禁用GSS gssencmode="disable"。有关详细信息,请参见文档。
sslmode="disable"
gssencmode="disable"