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.
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.
À 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.
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
Sudo -i -u postgres
createuser --interactive
createdb <username_from_step_3>
psql
à l'invite de commande.psql (x.x.x) Type "help" for help.
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)
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
Avait le même problème, un simple psql -d postgres
l'a fait (Tapez la commande dans le terminal)
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
.
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
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.
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
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.
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.
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