2012-09-07 1 views
7

J'ai couru ces lignes de "manage.py shell python":erreur de connexion de base de données Django

from django.db import connection 
cursor = connection.cursor() 

Mais obtenu l'erreur suivante:

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py", line 306, in cursor 
    cursor = self.make_debug_cursor(self._cursor()) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py", line 177, in _cursor 
    self.connection = Database.connect(**conn_params) 
    File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect 
    connection_factory=connection_factory, async=async) 
OperationalError: FATAL: role "jay" does not exist 

En settings.py je

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'mysite',      
     'USER': '',      
     'PASSWORD': '',     
     'HOST': '',      
     'PORT': '',      
    } 
} 

Qu'est-ce que je fais mal ici? J'ai installé postgresql et l'adaptateur

Répondre

10

FATAL: role "jay" does not exist

Depuis USER est vide, il utilise quel que soit votre nom d'utilisateur local est (jay), et vous n'avez pas créé un utilisateur PostgreSQL par ce nom.

Essayez:

psql -u postgres createuser -P jay 

Vous aurez probablement de mettre le mot de passe que vous entrez à l'invite dans settings.py, à moins que votre pg_hba.conf est d'utiliser ident comme méthode d'authentification.

+0

sur 9.4beta3 sur Debian, la commande serait: 'sudo su - "createuser de -P jay" de postgres' il y a sûrement une façon de le faire avec psql aussi bien, mais le -u devrait être -U et moi avions d'autres erreurs. –

+2

@jcomeau_ictx Vous n'avez jamais besoin de 'sudo su -'. Déjà. Utilisez 'sudo -u postgres' à la place. Même chose, pas besoin de citation désordonnée. –

1

Comme vous n'avez pas fourni de nom d'utilisateur, postgresql utilise le nom d'utilisateur de l'utilisateur de votre système d'exploitation sous lequel django est exécuté pour se connecter à la base de données. L'erreur que vous obtenez indique que cet utilisateur (Jay) n'est pas défini dans la base de données.

Une solution possible consiste à fournir le nom du nom d'utilisateur et mot de passe du propriétaire de la base de données mysite. Ajoutez également localhost en tant qu'hôte pour vous assurer que postgresql utilise l'authentification utilisateur/mot de passe au lieu d'utiliser le nom d'utilisateur propriétaire du processus django.

Questions connexes