psycopg2.OperationalError:严重:不支持的前端协议1234.5679:服务器支持2.0到3.0

时间:2019-12-05 07:14:03

标签: python postgresql psycopg2

我正在使用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 module pg

时,我可以在Windows上连接PostgreSQL。

6 个答案:

答案 0 :(得分:5)

向连接字符串添加?gssencmode = disable 对我有用:

import pyodbc
from sqlalchemy import create_engine

engine = create_engine(f'postgresql://{user}:{password}@localhost:5432/database_name?gssencmode=disable')

答案 1 :(得分:4)

使用Laravel和Postgres时遇到类似的错误。通过将其放在我的.env文件中来解决此问题:PGGSSENCMODE=disable

答案 2 :(得分:3)

1234.5679是客户端发送的用于请求SSL加密数据库连接的特殊代码,自1999年commit e0e7daef6da起,对PostgreSQL的支持就一直存在。但是您的PostgreSQL不能这么老,因为在2003年之前未添加对协议版本3.0的支持。

实际上,通过研究src/backend/postmaster/postmaster.c并阅读邮件列表,这是PostgreSQL服务器上的错误:

必须将客户端配置为尝试GSS身份验证,并且当服务器拒绝时,它希望协商SSL连接,但是服务器目前不希望这样做。因此是错误。

请参阅讨论here

要解决此问题,请在客户端上禁用GSS身份验证或SSL协商。

答案 3 :(得分:1)

为了使SSL连接正常工作并使用证书,您可以禁用GSS连接模式,以避免客户端尝试与GSS连接并直接尝试进行SSL连接(Postgres版本12 <12.3,我没有这样的问题在版本11上进行测试)。

下面带有verify-ca选项的示例,提供证书和密钥的文件名(来自GCP Cloud SQL的示例名称,发布时运行Postgres 12.1)。

   from sqlalchemy import create_engine

   db_user = 'user'
   db_pwd = 'secret'
   db_host = 'hostname'
   db_port = '5432'
   db_name = 'test'

   cnn = f'postgresql://{db_user}:{db_pwd}@{db_host}:{db_port}/{db_name}'
   ssl_args = {
       'gssencmode': 'disable',
       'sslmode': 'verify-ca',
       'sslrootcert': 'server-ca.pem',
       'sslcert': 'client-cert.pem',
       'sslkey': 'client-key.pem',
   }
   
   engine = create_engine(cnn, connect_args=ssl_args)

例如,此引擎可以与熊猫一起使用:

   df.to_sql('my_table', con=engine)

答案 4 :(得分:1)

如果您通过 conda 命令安装了此 Psycopg2 模块,则卸载该模块并使用 pip 命令进行安装。

命令: pip 安装 Psycopg2

以上命令可能会解决您的问题。我通过这一步解决了

答案 5 :(得分:0)

使用PostgresSQL 13.0,我遇到了同样的问题,显示了错误消息:

 unsupported frontend protocol 255.255: server supports 2.0
 unsupported frontend protocol 0.0: server supports 2.0 to

根据该站点,postgresql.org处理SSL / GSS协议协商问题。在Postgres 12.0版中应该已经解决了这个问题

我能够按照这些网站中包含的准则解决该问题: highgo.ca

在postgres终端中,我执行了以下命令,设置了环境变量gssencmode = disable,问题得以解决:

  psql -h localhost -U postgres -d "dbname=belez gssencmode=disable";