web-dev-qa-db-fra.com

psql: FATAL: la base de données "<utilisateur>" n'existe pas

J'utilise l'application PostgreSql pour mac ( http://postgresapp.com/ ). Je l'ai déjà utilisé sur d'autres machines, mais cela me pose problème lors de l'installation sur mon macbook. J'ai installé l'application et j'ai couru:

psql -h localhost

Il retourne:

psql: FATAL:  database "<user>" does not exist

Il semble que je ne puisse même pas exécuter la console pour créer la base de données qu'il tente de trouver. La même chose se passe quand je viens de courir:

psql 

ou si je lance psql à partir du menu déroulant de l'application:

Statistiques de la machine:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Toute aide est appréciée.

J'ai également essayé d'installer PostgreSql via homebrew et j'obtiens le même problème. J'ai aussi lu la page de documentation des applications qui dit:

Lorsque Postgres.app démarre pour la première fois, il crée la base de données $ USER, qui est la base de données par défaut pour psql si aucune n'est spécifiée. L'utilisateur par défaut est $ USER, sans mot de passe.

Donc, il semblerait que l’application ne crée pas $ USER, mais j’ai déjà installé -> désinstallé - réinstallé à plusieurs reprises maintenant, ce doit donc être quelque chose avec ma machine.

J'ai trouvé la réponse, mais je ne sais pas exactement comment cela fonctionne en tant qu'utilisateur ayant répondu à ce fil -> Mise en route de Postgresql sur Mac: la base de données "postgres" n'existe pas n'a pas suivi. J'ai utilisé la commande suivante pour ouvrir psql:

psql -d template1

Je laisserai celui-ci sans réponse jusqu'à ce que quelqu'un puisse expliquer pourquoi cela fonctionne.

614
Ryan Rich

Il semble que votre gestionnaire de paquets n'a pas réussi à créer la base de données nommée $ utilisateur pour vous. La raison pour laquelle

psql -d template1

fonctionne pour vous est que template1 est une base de données créée par postgres elle-même, et est présente sur toutes les installations. Vous êtes apparemment capable de vous connecter à template1, vous devez donc disposer de certains droits attribués par la base de données. Essayez ceci à l'invite du shell:

createdb

et voyez ensuite si vous pouvez vous reconnecter avec

psql -h localhost

Cela créera simplement une base de données pour votre utilisateur de connexion, ce qui, je pense, est ce que vous recherchez. Si createdb échoue, vous ne disposez pas de suffisamment de droits pour créer votre propre base de données et vous devrez trouver le moyen de réparer le paquet homebrew.

1050
Kirk Roybal

À partir du terminal, exécutez simplement la commande dans la fenêtre Invite de commandes. (Pas dans psql).

createdb <user>

Et essayez ensuite de relancer postgres.

142
Dhananjay

Par défaut, postgres tente de se connecter à une base de données portant le même nom que votre utilisateur. Pour éviter ce comportement par défaut, spécifiez simplement l'utilisateur et la base de données:

psql -U Username DatabaseName 
129
Aneer Anwar
  1. Connectez-vous en tant qu'utilisateur par défaut: Sudo -i -u postgres
  2. Créer un nouvel utilisateur: createuser --interactive
  3. Lorsque vous êtes invité à entrer le nom du rôle, entrez le nom d'utilisateur linux, puis sélectionnez Oui pour la question du superutilisateur.
  4. Toujours connecté en tant qu'utilisateur postgres, créez une base de données: createdb <username_from_step_3>
  5. Confirmez que les erreurs ont disparu en entrant: psql à l'invite de commande.
  6. La sortie devrait montrer psql (x.x.x) Type "help" for help.
51
user286539

Connectez-vous en utilisant la base de données template1 par défaut:

#psql -d template1
#template1=# \l

  List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(3 rows)

Créez une base de données avec votre userId:

template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE

Quittez et connectez-vous à nouveau

template1=# \q
gonzo:~ gogasca$ psql -h localhost
psql (9.4.0)
Type "help" for help.

gogasca=# \l
                                List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 gogasca   | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(4 rows)
39
user260826

J'ai rencontré la même erreur lorsque j'essaie d'ouvrir Postgresql sur mac

psql: FATAL:  database "user" does not exist

J'ai trouvé cette commande simple pour le résoudre:

méthode1

$ createdb --owner=postgres --encoding=utf8 user

et le type

 psql

Méthode 2:

psql -d postgres
17
Dinesh Pallapa

Avait le même problème, un simple psql -d postgres l'a fait (Tapez la commande dans le terminal)

7
rust

Cette erreur peut également se produire si la variable d'environnement PGDATABASE est définie sur le nom d'une base de données inexistante.

Sous OSX, j'ai constaté l'erreur suivante lors de la tentative de lancement de psql à partir du menu Postgress.app:

psql: FATAL: database "otherdb" does not exist

La solution à l'erreur était de supprimer export PGDATABASE=otherdb de ~/.bash_profile:

De plus, si PGUSER est défini sur autre chose que votre nom d'utilisateur, l'erreur suivante se produira:

psql: FATAL: role "note" does not exist

La solution consiste à supprimer export PGUSER=notme de ~/.bash_profile.

5
sdhca

Comme cette question est la première dans les résultats de recherche, je vais quand même mettre une solution différente pour un problème différent, afin de ne pas avoir un titre en double.

Le même message d'erreur peut s'afficher lors de l'exécution d'un fichier de requête dans psql sans spécifier de base de données. Comme il n'y a pas d'instruction use dans postgresql, nous devons spécifier la base de données sur la ligne de commande, par exemple:

psql -d db_name -f query_file.sql
4
Babken Vardanyan

Comme le createdb documentation déclare:

La première base de données est toujours créée par la commande initdb lorsque la zone de stockage de données est initialisée ... Cette base de données s'appelle postgres.

Donc, si certaines distributions OS/postgresql font cela différemment, ce n'est certainement pas la valeur par défaut/standard (juste vérifié que initdb sur openSUSE 13.1 crée la base de données "postgres", mais pas "<utilisateur>"). Le récit long, psql -d postgres devrait être utilisé lors de l'utilisation d'un utilisateur autre que "postgres".

Il est évident que la réponse acceptée, exécutant createdb pour créer une base de données portant le même nom que l'utilisateur, fonctionne également, mais crée une base de données superflue.

4
user686249

problème avec l’utilisation du pilote JDBC, il suffit donc d’ajouter la base de données (peut-être de manière redondante en fonction de l’outil utilisé) après le nom de l’hôte dans l’URL, par exemple. jdbc:postgres://<Host(:port)>/<db-name>

plus de détails sont documentés ici: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

1
Andreas Dietrich

Tout d'abord, il est utile de créer une base de données portant le même nom que votre utilisation actuelle, afin d'éviter l'erreur lorsque vous souhaitez simplement utiliser la base de données par défaut et créer de nouvelles tables sans déclarer explicitement le nom d'une base de données.

Remplacez "skynotify" par votre nom d'utilisateur:

psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"

-d déclare explicitement quelle base de données utiliser comme instruction par défaut pour les instructions SQL qui n'incluent pas explicitement un nom de base de données pendant cette session interactive.

PRINCIPES DE BASE POUR OBTENIR UNE IMAGE CLAIR DE CE QUE VOTRE SERVEUR PostgresQL contient.

Vous devez vous connecter à une base de données existante pour utiliser psql de manière interactive. Heureusement, vous pouvez demander à psql une liste de bases de données:

psql -l

.

                                          List of databases
               Name               | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
----------------------------------+-----------+----------+-------------+-------------+-------------------
 skynotify                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myapp_dev                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres                         | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 Ruby-getting-started_development | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
 template1                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
(6 rows)

Ceci ne démarre PAS la console interactive, il envoie simplement un tableau à base de texte au terminal.

Comme le dit une autre réponse, postgres est toujours créé. Vous devez donc l'utiliser comme base de données sécurisée lorsque vous souhaitez simplement que la console soit opérationnelle sur d'autres bases. Si ce n'est pas le cas, répertoriez les bases de données, puis utilisez l'une d'entre elles.

De manière similaire, sélectionnez des tables dans une base de données:

psql -d postgres -c "\dt;"

Ma base de données "postgres" n'a pas de table, mais toute base de données qui en sortira affichera une table textuelle sur le terminal (sortie standard).

Et pour être complet, nous pouvons également sélectionner toutes les lignes d'une table:

psql -d Ruby-getting-started_development -c "SELECT * FROM widgets;"

.

 id | name | description | stock | created_at | updated_at 
----+------+-------------+-------+------------+------------
(0 rows)

Même si aucune ligne n'est renvoyée, vous obtiendrez les noms de champs.

Si vos tables comportent plus d'une douzaine de lignes, ou en cas de doute, il sera plus utile de commencer par un nombre de lignes pour comprendre la quantité de données contenue dans votre base de données:

 psql -d Ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

.

 count 
-------
     0
(1 row)

Et ne vous confondez pas avec "1 ligne", cela représente simplement le nombre de lignes renvoyées par la requête, mais la ligne 1 contient le nombre souhaité, qui est 0 dans cet exemple.

REMARQUE: une base de données créée sans propriétaire défini appartiendra à l'utilisateur actuel.

0
Sky Notify

J'ai essayé certaines de ces solutions, mais elles ne fonctionnaient pas tout à fait (même si elles étaient vraiment sur la bonne voie!)

En fin de compte mon erreur était:

FATAL: échec de l'authentification du mot de passe pour l'utilisateur

quand j'ai exécuté la commande suivante: psql

Alors j'ai lancé ces deux commandes:

dropdb()
createdb()

NOTE: this will enlèvera la base de données, mais je n'en avais pas besoin et pour une raison quelconque, je ne pouvais plus accéder à pqsl, aussi je l'ai enlevé et recréé. Ensuite, psql fonctionna à nouveau.

0
Ben Cartwright

Connectez-vous à postgres via le super-utilisateur existant.

Créez une base de données avec le nom d’utilisateur auquel vous vous connectez à postgres.

create database username;

Maintenant, essayez de vous connecter via nom d'utilisateur

0
Sameer Choudhary