Django 5.1 + Postgresql (сервер debian)

Пытаюсь подключиться к базе posgresql, как написано в документации Django: https://docs.djangoproject.com/en/5.1/ref/databases/#postgresql-notes

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "OPTIONS": {
            "service": "my_service",
            "passfile": ".my_pgpass",
        },
    }
}

Я создал 2 файла в своем домашнем каталоге .pg_service.conf

[my_service]
host=/var/run/postgresql
user=dbms
dbname=dbms_db
port=5432

.pgpass

/var/run/postgresql:5432:dbms_db:dbms:my_password

Такая команда как тест .pgpass:

psql -h localhost -U dbms dbms_db

работает. Но соединение не работает:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "OPTIONS": {
            "service": "my_service",
            "passfile": ".pgpass",
        },
    }
}

с такой ошибкой

Traceback

(последний
последний вызов): Файл «/home/www/projects/amodulesu/venv/lib/python3.11/site-packages/django/db/backends/base/base.py», строка 279, in ensure_connection self.connect() Файл «/home/www/projects/amodulesu/venv/lib/python3.11/site-packages/django/utils/asyncio.py», строка 26, in inner return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ Файл «/home/www/projects/amodulesu/venv/lib/python3.11/site-packages/django/db/backends/base/base.py», строка 256, in connect self.connection = self.get_new_connection(conn_params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/home/www/projects/amodulesu/venv/lib/python3.11/site-packages/django/utils/asyncio.py», строка 26, in inner return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ Файл «/home/www/projects/amodulesu/venv/lib/python3.11/site-packages/django/db/backends/postgresql/base.py», строка 332, in get_new_connection connection = self.Database.connect(**conn_params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Файл «/home/www/projects/amodulesu/venv/lib/python3.11/site-packages/psycopg/connection.py», строка 119, in connect raise last_ex.with_traceback(None) psycopg.OperationalError: connection failed: connection to server on socket «/var/run/postgresql/.s.PGSQL.5432» не удалось: FATAL: Peer аутентификация не прошла для пользователя «dbms» ... Файл «/home/www/projects/amodulesu/venv/lib/python3.11/site-packages/psycopg/connection.py», строка 119, in connect raise last_ex.with_traceback(None) django.db.utils.OperationalError: connect

что не так с моим кодом?

Пытаюсь использовать export vars в debian - но не получается...

При использовании psql вы подключаетесь к localhost, тогда как в приложении django вы пытаетесь подключиться к /var/run/postgresql/ (или, скорее, к юнит-сокету в этом каталоге). Это разные методы, и они перечислены отдельно в pg_hba.conf.

Соединение localhost (127.0.0.1) использует пароли («scram-sha-256») для аутентификации.

На unix-сокете («local») используется аутентификация с помощью пира. Это означает, что ваш системный пользователь должен совпадать с пользователем вашей базы данных («dbms»).

Если вы попробуете подключиться с помощью psql без параметра -h, он должен по умолчанию использовать локальные соединения unix-socket и показать ту же проблему.

Если вы попробуете подключиться к localhost («127.0.0.1») в конфигурации django, то все должно получиться.

Невозможно использовать

    'service': 'my_service',
    'passfile': '.pgpass',

Так что используйте decouple и tradional

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'dbms_db',
        'USER': 'dbms',
        'PASSWORD': DB_PASS,
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}
Вернуться на верх