Je rencontre un problème de configuration de projet Django avec POSTGRESQL.
Voici mon paramètre de base de données setting.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.
},
}
Maintenant, dans postgres backend, ce que j'ai fait est.
rohit@rohit-desktop:~$ Sudo su - postgres
postgres@rohit-desktop:~$ createuser --superuser indivo # create a super user indivo
postgres@rohit-desktop:~$ 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
postgres@rohit-desktop:~$ createdb -U indivo -O indivo indivo #create db indivo
Malheureusement, lorsque j'essaie de synchroniser, je reçois l'erreur.
psycopg2.OperationalError: FATAL: Peer authentication failed for user "indivo"
Aidez-moi s'il vous plaît ce que je peux faire de mal ici.
J'ai un problème similaire et je l'ai résolu avec cette réponse en ajoutant localhost
aux paramètres de la base de données Host
dans settings.py, vos paramètres de base de données devraient donc ressembler à ceci:
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', # Set to empty string for localhost.
'PORT':'', # Set to empty string for default.
},
}
Par défaut, dans de nombreuses distributions Linux, l'authentification du client est définie sur "peer" pour les connexions socket Unix à la base de données. Ceci est défini dans le fichier de configuration pg_hba.conf
pour postgresql. La documentation de la bibliothèque psycopg2 python indique:
- * Host *: adresse de l'hôte de la base de données (par défaut, socket UNIX si non fourni)
Ainsi, si vous laissez l'option Hôte vide, votre script essaiera de se connecter et d'utiliser le nom d'utilisateur Unix: mot de passe pour l'authentification. Pour résoudre ce problème, vous pouvez soit:
pg_hba.conf
pour qu'il utilise md5 pour les connexions socket afin qu'il utilise les noms d'utilisateur et les mots de passe stockés dans le magasin d'utilisateurs DB posttrgres (non recommandé car cela pourrait empêcher l'authentification des utilisateurs du système).Vous devez définir pg_hba.conf
pour utiliser l'authentification md5
pour l'utilisateur, la base de données et l'adresse IP source qui vous intéresse. Voir le chapitre authentification client de la documentation.
Recherchez pg_hba.conf
sur Stack Overflow pour plus d'informations.
Moi aussi, je rencontrais un problème similaire lors de la configuration de la base de données postgresql avec le projet Django.
Mon système exécute RHEL CentOS 7 avec la version 10 de Postgresql. Je cherche beaucoup mais je ne trouve pas ce qui se passe réellement tant que je ne me suis pas connecté au journal /var/lib/pqsql/10/data/log/postgresql*.log
2017-11-10 00: 31: 40.499 IST [14129] DETAIL: Connexion correspondante, ligne 85 de pg_hba.conf: "Tout héberger tous :: 1/128 ident"
Donc, je viens de changer cette ligne particulière dans le fichier /var/lib/pgsql/10/data/pg_hba.conf: FromHost all all :: 1/128 ident
à
Tout héberger :: 1/128 md5
avec qui je suis capable de créer une base de données et une table en utilisant manage.py migrate
Merci à tous ceux qui m'ont aidé à trouver cette solution. en particulier @juliocesar et la documentation officielle pour l'authentification client postgresql