2013-04-02 5 views
0

Je recevais la célèbreproblème de mot de passe sur createdb - PostgreSQL sur Mac OS X Mountain Lion

psql: could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

erreur en essayant de createdb dans le Terminal dans Mac OS X Mountain Lion, donc en suivant les instructions here, j'ai ajouté export PATH=/opt/local/lib/postgresql92/bin:$PATH à mon .bash_profile et maintenant si je tape which psql je reçois /opt/local/lib/postgresql92/bin/psql (où précédemment j'obtenais /usr/bin/psql).

Cependant, si j'essaie createdb database maintenant, je suis invité à entrer un mot de passe, je ne sais pas (ce n'est pas mon mot de passe de l'utilisateur par défaut), et si je saisis mal deux fois, je reçois:

createdb: could not connect to database template1: 
FATAL: password authentication failed for user "username" 

username est mon nom d'utilisateur par défaut dans Terminal. Ce que j'essaye de faire est de créer une base de données PostgreSQL à laquelle je peux accéder à partir d'un projet Django vivant à l'intérieur d'un virtualenv. J'utilise PostgreSQL 9.2. Qu'est-ce que je fais mal?

Répondre

2

createdb doit se connecter à PostgreSQL sous le capot afin d'exécuter la commande SQL qui va créer la nouvelle base de données. Par défaut, il utilise votre nom d'utilisateur de système d'exploitation pour cela. Il échoue, selon le message d'erreur, soit parce que cet utilisateur n'existe pas en tant qu'utilisateur de base de données (le plus plausible), soit parce qu'il a un mot de passe dont vous ne vous souvenez pas.

Pour corriger cela, en supposant que vous utilisez le paquet macports qui semble plausible étant donné le chemin d'installation, vous pouvez exécuter:

sudo su postgres -c '/opt/local/lib/postgresql92/bin/createdb dbname' 

La nouvelle base de données sera détenue par l'utilisateur postgres, ce qui est toujours idéal. Un choix plus judicieux serait de créer un utilisateur normal db avec votre nom d'utilisateur et rendre le propriétaire de la base de données:

sudo su postgres -c '/opt/local/lib/postgresql92/bin/createuser username' 
sudo su postgres -c '/opt/local/lib/postgresql92/bin/createdb -O username dbname' 

EDIT: La commande createuser invite ces questions (de la page de manuel):

 $ createuser joe 
     Shall the new role be a superuser? (y/n) n 
     Shall the new role be allowed to create databases? (y/n) n 
     Shall the new role be allowed to create more new roles? (y/n) n 

En répondant oui à ces deux derniers, le nouvel utilisateur aura des droits suffisants pour qu'il puisse être utilisé par la suite au lieu de postgres jusqu'à sudo, par ex. cela fonctionnera:

createuser -U username newuser 
createdb -U username newdatabase 
+0

Merci pour la réponse, Daniel! Y at-il un moyen de faire tout cela sans avoir besoin d'utiliser 'sudo' à chaque fois? Comme si je crée un nouvel utilisateur avec mon nom d'utilisateur, puis-je simplement basculer vers cet utilisateur et créer des bases de données de cette façon? Ou y aurait-il un problème avec les permissions du répertoire, etc? – GChorn

+0

De même, où ces commandes créent-elles la base de données? Je n'arrive pas à le trouver sur mon ordinateur. – GChorn

+1

@GChorn: voir mon edit à propos de createuser. En ce qui concerne la base de données, il y a un répertoire par base de données dans le datadir de PG, mais il est entièrement géré par postgres, l'utilisateur n'est pas autorisé à faire quoi que ce soit avec ces répertoires et fichiers. –