Ошибка подключения Django - django.db.utils.OperationalError: FATAL: не удалось выполнить аутентификацию пароля для пользователя "postgres"

Мой проект Django не может подключиться к базе данных postgres.

django.db.utils.OperationalError: FATAL: аутентификация пароля failed for user "postgres"

Файл settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': '127.0.0.1',
        'PORT': 5432,
        'ATOMIC_REQUESTS': True
    }
}

Содержание файла pg_hba.conf:

enter image description here

Раньше метод 'TRUSTED' по умолчанию был установлен на 'PEER'. Но он не работал таким образом. Поэтому я изменил его на TRUSTED, запустил systemctl restart postgresql, и теперь он тоже не работает.

Я знаю, что пароль postgres по умолчанию пуст, поэтому я попробовал следующее:

sudo -u postgres psql

postgres=# ALTER USER postgres PASSWORD 'postgres';

На выходе получилось ALTER ROLE. Но ошибка от Django все еще сохраняется.

У меня закончились идеи. Есть какие-нибудь подсказки?

У меня закончились идеи.

Я бы попробовал использовать ALTER ROLE вместо alter USER, как описано в документации. Но поскольку ответом является ALTER ROLE, оба варианта могут сработать.

В противном случае вы можете попытаться войти непосредственно в пользователя

sudo psql -d myproject -U myprojectuser

Другим вариантом может быть проверка того, будет ли работать новый пользователь. Я знаю, что ошибка говорит о проверке подлинности пароля, но предоставили ли вы привилегии пользователю?

CREATE USER myprojectuser WITH PASSWORD 'password';
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

Команды были взяты из the digitalocean ubuntu & django & posgres setup guide

Поскольку вы указываете хост как '127.0.0.1', вы не будете соответствовать ни строкам 'peer', ни 'trust', которые применяются только к локальным сокетам, а не к TCP-соединению. Но скорее со строкой 127.0.0.1/32 md5.

Установка пароля пользователя должна была сработать. Посмотрите в лог-файле сервера более подробные причины, по которым это не произошло.

Вернуться на верх