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",
},
}
}
с такой ошибкой
последний вызов): Файл «/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: connectTraceback
(последний
что не так с моим кодом?
Пытаюсь использовать 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',
}
}