psql: FATAL: database "" n'existe pas

j'utilise L'application PostgreSql pour mac ( http://postgresapp.com / ). Je l'ai utilisé dans le passé sur d'autres machines mais il me donne quelques problèmes 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'elle tente de trouver. La même chose se produit quand je cours:

psql 

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

statistiques 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 je reçois le même problème. J'ai aussi lu les applications page de documentation qui dit:

Quand Postgres.l'application démarre d'abord, elle crée la base de données $ USER, qui est la base de données par défaut pour psql quand aucun n'est spécifié. Le 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 installé->désinstallé-réinstallé plusieurs fois Maintenant donc ça doit être quelque chose avec ma machine.

j'ai trouvé le répondre mais je ne suis pas sûr exactement comment cela fonctionne comme l'utilisateur qui a répondu sur ce fil -> obtenir Postgresql courant dans Mac: 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 laisse celui-ci sans réponse jusqu'à ce que quelqu'un puisse expliquer pourquoi cela fonctionne.

508
demandé sur Community 2013-07-13 23:18:24

17 réponses

il semble que votre gestionnaire de paquets n'ait pas réussi à créer la base de données nommée $user 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 lui-même, et est présent sur toutes les installations. Vous êtes apparemment capable de vous connecter au template1, donc vous devez avoir certains droits qui vous sont attribués par la base de données. Essayez ceci à une invite de shell:

createdb

et ensuite voir si vous pouvez vous connecter à nouveau avec

psql -h localhost

cela va simplement créer une base de données pour votre utilisateur de connexion, qui je pense est ce que vous recherchez. Si createdb échoue, alors vous n'avez pas assez de droits pour créer votre propre base de données, et vous devrez trouver comment réparer le paquet homebrew.

896
répondu Kirk Roybal 2013-07-29 23:40:57

par défaut, postgres essaie de se connecter à une base de données avec le même nom que votre utilisateur. Pour éviter ce comportement par défaut, il suffit de spécifier l'utilisateur et la base de données:

psql -U Username DatabaseName 
97
répondu Aneer Anwar 2014-03-11 18:54:18

depuis le terminal, il suffit d'exécuter la commande dans la fenêtre d'invite de commande. (Pas à l'intérieur de psql) .

createdb <user>

et ensuite essayer de courir de nouveau postgres.

93
répondu Dhananjay 2018-04-13 09:11:51
  1. connecter en tant qu'utilisateur par défaut: sudo -i -u postgres
  2. créer un nouvel utilisateur: createuser --interactive
  3. lorsqu'on vous demande le nom du rôle, entrez le nom d'utilisateur linux et sélectionnez Oui à la question super-utilisateur.
  4. toujours connecté en tant qu'utilisateur postgres, créer une base de données: createdb <username_from_step_3>
  5. confirmer que les erreurs ont disparu en tapant psql à l'invite de commande.
  6. la sortie devrait afficher psql (x.x.x) Type "help" for help.
41
répondu user286539 2014-11-03 19:52:46

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

#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

quitter et se connecter à 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)
33
répondu spicyramen 2015-02-24 07:54:50

j'ai fait face à la même erreur quand j'ai essayé d'ouvrir postgresql sur mac

psql: FATAL:  database "user" does not exist

j'ai trouvé cette simple commande pour la résoudre:

method1

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

et type

 psql

Méthode 2:

psql -d postgres
11
répondu Dinesh Pallapa 2017-08-10 03:40:25

cette erreur peut aussi se produire si la variable D'environnement PGDATABASE est définie au nom d'une base de données qui n'existe pas.

sur OSX, j'ai vu l'erreur suivante en essayant de lancer psql depuis le Postgress.menu app:

psql: FATAL: database "otherdb" does not exist

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

en outre, si PGUSER est défini à quelque chose d'autre que votre nom d'utilisateur, le suivant erreur se produira:

psql: FATAL: role "note" does not exist

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

5
répondu sdhca 2014-08-26 03:33:09

comme le createdb documentation indique:

la première base de données est toujours créée par la commande initdb lorsque la zone de stockage des données est initialisée... Cette base de données est appelée postgres.

donc si certaines distributions OS / postgresql font cela différemment, ce n'est certainement pas la norme par défaut (juste vérifié que initdb sur openSUSE 13.1 crée la DB "postgres", mais pas " Pour faire court, psql -d postgres devrait être utilisé lorsqu'on utilise un utilisateur autre que"postgres".

évidemment la réponse acceptée, en lançant createdb pour créer un DB nommé comme l'utilisateur, fonctionne aussi bien, mais crée un DB superflu.

4
répondu user686249 2015-02-24 13:24:09

puisque cette question Est la première dans les résultats de recherche, je vais mettre une solution différente pour un problème différent ici de toute façon, afin de ne pas avoir un titre dupliqué.

le même message d'erreur peut apparaître 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 de déclaration 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
3
répondu Babken Vardanyan 2014-08-17 09:58:29

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

3
répondu Djamal Dagirov 2017-12-05 08:42:14

a eu le problème d'utiliser le pilote JDBC, donc il suffit d'ajouter la base de données (peut-être de manière redondante selon l'outil que vous pouvez utiliser) après le nom d'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
répondu Andreas Dietrich 2014-08-26 13:38:50

j'ai essayé certaines de ces solutions, mais elles n'ont pas tout à fait fonctionné (bien qu'elles aient été très sur la bonne voie!)

à la fin mon erreur était:

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

quand j'ai lancé la commande suivante: psql

alors j'ai lancé ces deux commandes:

dropdb()
createdb()

NOTE: ce sera supprimer le db, mais je n'en avais pas besoin et pour une raison quelconque Je ne pouvais plus accéder à pqsl, donc je l'ai enlevé et recréé. Puis psql a de nouveau fonctionné.

0
répondu Ben Cartwright 2018-05-03 00:08:58

tout d'abord, il est utile de créer une base de données nommée de la même façon que votre utilisation actuelle, pour prévenir l'erreur lorsque vous voulez juste utiliser la base de données par défaut et de créer de nouvelles tables sans déclarer le nom d'une base de données explicitement.

remplacer "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 par défaut pour les déclarations SQL qui n'incluent pas explicitement un nom de db lors de cette session interactive.

les bases pour obtenir une image claire de ce que votre serveur PostgresQL a dedans.

vous devez vous connecter à une base de données existante pour utiliser psql de façon 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)

cela ne démarre pas la console interactive, il sort juste une table textuelle vers le terminal.

comme le dit une autre réponse, postgres est toujours créé, donc vous devriez l'utiliser comme votre base de données de sécurité quand vous voulez juste obtenir la console a commencé à travailler sur d'autres bases de données. S'il n'y en a pas, dressez la liste des bases de données et utilisez-en une.

de la même façon, sélectionnez tables à partir d'une base de données:

psql -d postgres -c "\dt;"

ma base de données" postgres " n'a pas de tables, mais n'importe quelle base de données qui fait affichera une table textuelle au terminal (standard out).

et par souci d'exhaustivité, nous pouvons également sélectionner toutes les lignes d'un tableau:

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

.

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

même s'il n'y a aucune ligne retournée, vous obtiendrez les noms des champs.

si vos tables ont plus d'une douzaine de lignes, ou vous n'êtes pas sûr, il sera plus utile de commencer par un nombre de lignes pour comprendre combien de données est dans votre base de données:

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

.

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

et ne croyez pas que" 1 rangée " vous trouble, il représente juste combien de rangées sont retournées par la requête, mais la 1 rangée contient le nombre que vous voulez, qui est 0 dans cet exemple.

NOTE: un pb créé sans propriétaire défini sera la propriété de l'utilisateur courant.

-1
répondu Sky Notify 2016-09-15 06:12:35

avait ce problème lors de l'installation de postgresql via homebrew.

devait créer le" postgres "super user par défaut avec:

createuser --interactive postgres réponse y pour le super utilisateur

createuser --interactif de l'utilisateur de répondre y pour pour super utilisateur

-1
répondu unom 2017-10-26 09:59:12

j'avais encore le problème ci-dessus après avoir installé postgresql en utilisant homebrew - Je l'ai résolu en mettant /usr / local / bin dans mon chemin avant/usr / bin

-2
répondu matw50 2014-08-02 01:40:29

si vous obtenez cette erreur lors du déploiement d'un Rails projet avec Capistrano vous pouvez vouloir créer une base de données sur votre serveur distant.

connectez-vous à votre Ubuntu et exécutez:

sudo -u postgres psql

entrez votre mot de passe d'utilisateur postgres si demandé. Maintenant, créez votre base de données en entrant:

CREATE DATABASE dbname_production;

Le nom doit être celui que vous avez spécifié dans shared/config/database.yml sur votre serveur de production.

sortir en entrant \q

-3
répondu The Whiz of Oz 2016-10-28 06:36:33

dans son explication la plus simple; c'est un problème noob. Il suffit de taper

pgres

donnera cette réponse.

pgres <db_name> 

réussira sans erreur si l'utilisateur a les autorisations pour accéder à la db.

on peut entrer dans les détails des variables d'environnement exportées, mais c'est inutile .. c'est trop élémentaire pour échouer pour une autre raison.

-6
répondu John Doe 2016-05-18 02:27:20