Подтвердить что ты не робот

Настройка Django: psycopg2.OperationalError: FATAL: Ошибка одноранговой аутентификации для пользователя "indivo"

У меня проблема с настройкой проекта Django с помощью POSTGRESQL.

Вот мой параметр settings.py базы данных

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'HOST':'', # Set to empty string for localhost.
        'PORT':'', # Set to empty string for default.
        },
}

Теперь в postgres backend я сделал это.

[email protected]:~$ sudo su - postgres
[email protected]:~$ createuser --superuser indivo   # create a super user indivo
[email protected]:~$ psql  # open psql terminal 
psql (9.1.8)
Type "help" for help.

postgres=# \password indivo  # set the password ritvik
Enter new password: 
Enter it again: 
postgres=# \q   #logout 
[email protected]:~$ createdb -U indivo -O indivo indivo  #create db indivo 

К сожалению, когда я пытаюсь синхронизировать, я получаю сообщение об ошибке.

psycopg2.OperationalError: FATAL:  Peer authentication failed for user "indivo"

Пожалуйста, помогите мне, что я могу делать неправильно здесь.

4b9b3361

Ответ 1

У меня похожая проблема, и я решил ее с помощью этого ответа, добавив localhost к настройкам HOST базы данных в settings.py, поэтому настройки вашей базы данных должны выглядеть следующим образом:

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.postgresql_psycopg2', # '.postgresql_psycopg2', '.mysql', or '.oracle'
        'NAME':'indivo', # Required to be non-empty string
        'USER':'indivo', # Required to be non-empty string
        'PASSWORD':'ritvik',
        'HOST':'localhost', # <- Changed from empty string to localhost
        'PORT':'', # Set to empty string for default.
        },
}

Ответ 2

По умолчанию во многих дистрибутивах Linux аутентификация клиента настроена на "равный" для соединений сокетов Unix с БД. Это устанавливается в конфигурационном файле pg_hba.conf для postgresql. Документация библиотеки python psycopg2 гласит:

- * host *: адрес хоста базы данных (по умолчанию используется UNIX-сокет, если он не предоставлен)

Итак, если вы оставите опцию хоста пустым, ваш script попытается подключиться и использовать имя пользователя Unix: пароль для аутентификации. Чтобы исправить это, вы можете:

  • установите параметр "хозяин" явно в 127.0.0.1 в код конфигурации, вставленный в ваш вопрос.
  • Измените файл pg_hba.conf, чтобы использовать md5 для подключений сокетов, чтобы он использовал имена пользователей и пароли, хранящиеся в хранилище пользовательских данных postggres (не рекомендуется, так как это может нарушить аутентификацию для пользователей системы).

Ответ 3

Вам нужно установить pg_hba.conf для использования аутентификации md5 для интересующего пользователя, db и источника. См. Главу проверка подлинности клиента документации.

Найдите pg_hba.conf для за тонну дополнительной информации.

Ответ 4

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

Моя система запускает RHEL CentOS 7 с postgresql версии 10. Я много искал, но не мог найти на самом деле то, что происходит, пока не увидел журнал в /var/lib/pqsql/ 10/data/log/postgresql*.log

2017-11-10 00: 31: 40.499 IST [14129] ПОДРОБНОЕ ОПИСАНИЕ: Соединение соответствует строке pg_hba.conf 85: "host all all:: 1/128 ident"

Итак, я просто изменил эту конкретную строку в файле /var/lib/pgsql/ 10/data/pg_hba.conf: из host all all:: 1/128 ident

to

host all all:: 1/128 md5

с тем, что я могу создать базу данных и таблицу, используя команду manage.py migrate

Спасибо всем, кто помог мне найти это решение. особенно @juliocesar и официальная документация для аутентификации клиента postgresql