Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django + Psycopg2: InterfaceError: only protocol 3 supported

When loading pages in my Django + Postgresql setup I occasionally get this error but not all the time:

psycopg2 in connect

InterfaceError: only protocol 3 supported

psycopg2/__init__.py ? in connect

        raise TypeError('missing dsn and no parameters')
    else:
        dsn = " ".join(["%s=%s" % (k, _param_escape(str(v)))
            for (k, v) in items])
conn = _connect(dsn, connection_factory=connection_factory, async=async)
if cursor_factory is not None:
    conn.cursor_factory = cursor_factory
return conn

I have absolutely no idea what could be causing this.

My production.py settings file:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'mydbname',                      # Or path to database file if using sqlite3.
            # The following settings are not used with sqlite3:
            'USER': 'myuser',
            'PASSWORD': 'mypassword',
            'HOST': 'localhost',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
            'PORT': '',                      # Set to empty string for default.
        }
    }
like image 733
samgreeneggsham Avatar asked Mar 01 '26 16:03

samgreeneggsham


1 Answers

First install psycopg2-binary:

pip install psycopg-binary

After that change in settings.py to:

DATABASES = {
"default": {
    "ENGINE": "django.db.backends.postgresql",
    "NAME": "mydbname",
    "HOST": "localhost",
    "PORT": (PORT_NUMBER) or ""
    "USER": "myuser",
    "PASSWORD": "mypassword",
}}
like image 88
Jero Guzman Avatar answered Mar 04 '26 05:03

Jero Guzman