psycopg2 connect дает ошибку в работе неподдерживаемого протокола интерфейса - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь подключиться к базе данных postgres 12.2 из anaconda python 3.8.2 в Windows 10. Я использую среду conda с установленными следующими пакетами:

asgiref==3.2.7
certifi==2020.4.5.1
Django==3.0.4
django-crispy-forms==1.8.1
Jinja2==2.11.1
MarkupSafe==1.1.1
psycopg2==2.8.5
pytz==2019.3
sqlparse==0.3.1
wincertstore==0.2

Я создал базу данных и могу подключиться, используя psql и pgAdmin. По приглашению python я могу импортировать psycopg2, но я получаю сообщение об ошибке подключения к базе данных:

>>> import psycopg2
>>> c = psycopg2.connect("host='localhost' dbname='mydb' user='myuser' password='secret'")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "J:\Programs\Anaconda3\envs\myenv\lib\site-packages\psycopg2\__init__.py", line 127, 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

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

После предложения @jjanes и соответствующего ответа здесь Я отключил ssl и gss:

>>> import psycopg2
>>> c = psycopg2.connect("host='localhost' dbname='mydb' user='myuser' password='secret' sslmode='disable' gssencmode='disable'")

Это работает, хотя учтите, что вам не нужно отключать как sslmode, так и gsssencmode, также работает отключение одного из них по отдельности.

Для Django пользователей, вам просто нужно добавить соответствующую опцию в settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': 'secret',
        'HOST': 'localhost',
        'PORT': '5432',
        'OPTIONS': {'sslmode':'disable'},
    }
}
0 голосов
/ 07 апреля 2020

Это известная ошибка, когда клиент думает, что он может использовать шифрование GSS, но затем обнаруживает, что не может (либо сервер не поддерживает его, либо не любит учетные данные), и поэтому пытается пересмотреть условия для ssl encryption.

Обычно вам нужно go изо всех сил, чтобы заставить клиента думать, что он может использовать шифрование GSS (кроме Ma c, где некоторые ошибочные библиотеки ma c заставляют его всегда думать оно может). Вы специально настроили GSS / kerberos в своей среде Anaconda?

...