psql: FATAL: le rôle "postgres" n'existe pas
Je suis un novice postgres.
J'ai installé les postgres.app pour mac. Je jouais avec les commandes psql et j'ai accidentellement laissé tomber la base de données postgres. Je ne sais pas ce qui était en elle.
Je travaille actuellement sur un tutoriel: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/
Et je suis coincé à sudo -u postgres psql postgres
MESSAGE D'ERREUR: psql: FATAL: role "postgres" does not exist
$ quelle psql
/Applications/Postgres.app/Contents/MacOS/bin/psql
C'est ce qui ressort de psql -l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+------------+----------+---------+-------+---------------------------
user | user | UTF8 | en_US | en_US |
template0 | user | UTF8 | en_US | en_US | =c/user +
| | | | | user =CTc/user
template1 | user | UTF8 | en_US | en_US | =c/user +
| | | | | user =CTc/user
(3 rows)
Et alors quelles sont les mesures que je devrais prendre? Supprimer un tout lié à psql et tout réinstaller?
Merci pour l'aide les gars!
14 réponses
Notez que le message d'erreur ne parle pas d'une base de données manquante, il parle d'un rôle manquant. Plus tard dans le processus de connexion, il peut également tomber sur la base de données manquante.
Mais la première étape consiste à vérifier le rôle manquant: Quelle est la sortie dans psql
de la commande \du
? Sur mon système Ubuntu la ligne ressemble à ceci:
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
S'il n'est pas au moins un rôle de superuser
, alors vous avez un problème :-)
S'il y en a un, vous pouvez l'utiliser pour la connexion. Et en regardant la sortie de votre commande \l
: les autorisations pour user
sur les bases de données template0
et template1
sont les mêmes que sur mon système Ubuntu pour le superutilisateur postgres
. Donc, je pense que votre configuration simple utilise user
comme super-utilisateur. Vous pouvez donc essayer cette commande pour vous connecter:
sudo -u user psql user
Si user
est vraiment le superutilisateur DB, vous pouvez créer un autre superutilisateur DB et une base de données privée vide pour lui:
CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;
Mais depuis votre postgres.configuration de l'application ne semble pas faire cela, vous ne devriez pas. Simple adapter le tutoriel.
La clé est " j'ai installé le postgres.app pour mac."cette application configure l'installation locale de PostgresSQL avec un superutilisateur de base de données dont le nom de rôle est le même que votre nom de connexion (court).
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.
Certains scripts (par exemple, une sauvegarde de base de données créée avec pgdump
sur Linux systsem) et les tutoriels supposeront que le superutilisateur a le nom de rôle traditionnel de postgres
.
Vous pouvez rendre votre installation locale un peu plus traditionnelle et éviter ces problèmes en faisant une seule fois:
/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres
Ce qui rendra ces fatales: le rôle "postgres" n'existe pas disparaît.
Pour MAC:
- Installer Homebrew
brew install postgres
initdb /usr/local/var/postgres
-
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
ou/usr/local/opt/postgres/bin/createuser -s postgres
qui utilisera simplement la dernière version. - démarrer le serveur postgres manuellement:
pg_ctl -D /usr/local/var/postgres start
Pour démarrer le serveur au démarrage
mkdir -p ~/Library/LaunchAgents
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Maintenant, il est configuré, connectez-vous en utilisant psql -U postgres -h localhost
ou utilisez PgAdmin pour L'interface graphique.
Par défaut, l'utilisateur postgres
n'aura aucune connexion le mot de passe.
Consulter ce site pour plus d'articles comme celui-ci: https://sites.google.com/site/nitinpasumarthy/blog/installingpostgresonmac
Pour moi, ce code a fonctionné:
/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres
Ça vient d'ici: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
createuser postgres --interactive
Ou faire un superutilisateur postgresl juste avec
createuser postgres -s
L'exécution de ceci sur la ligne de commande devrait le réparer
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
J'avais besoin de désactiver $PGUSER
:
$ unset PGUSER
$ createuser -s postgres
Supprimer la base de données postgres
n'a pas vraiment d'importance. Cette base de données est initialement vide et son but est simplement que l'utilisateur postgres
ait une sorte de" maison " à laquelle se connecter, s'il en a besoin.
Vous pouvez toujours le recréer avec la commande SQL CREATE DATABASE postgres;
Notez que le tutoriel mentionné dans la question n'est pas écrit avec postgres.app
à l'esprit.
Contrairement à PostgreSQL pour Unix en général, postgres.app
essaie de ressembler à une application normale par opposition à un service qui serait exécuté par un utilisateur postgres
dédié ayant des privilèges différents de ceux de votre utilisateur normal. {[3] } est géré et géré par votre propre compte.
Ainsi, au lieu de cette commande: sudo -u postgres psql -U postgres
, il serait plus dans l'esprit de postgres.app pour simplement émettre: psql
, qui se connecte automatiquement à une base de données correspondant au nom de vos utilisateurs, et avec un compte db du même nom qui se trouve être Superutilisateur, de sorte qu'il peut faire n'importe quoi autorisations-Sage.
Pour ce que ça vaut, j'ai ubuntu et de nombreux paquets installés et il est entré en conflit avec lui.
, Pour moi, la bonne réponse était:
sudo -i -u postgres-xc
psql
Je ne pense pas que sudo soit nécessaire ici car psql-l renvoie une liste de bases de données. Cela me dit qu'initdb a été exécuté sous l'utilisateur actuel de l'Utilisateur, pas sous l'utilisateur postgres.
, Vous pouvez simplement:
psql
Et continuez le tutoriel.
Je suggérerais les points généraux de A. H de créer l'utilisateur postgres et db car de nombreuses applications peuvent s'attendre à ce que cela existe.
Une brève explication:
PostgreSQL ne s'exécutera pas avec un accès administratif au le système d'exploitation. Au lieu de cela, il s'exécute avec un utilisateur ordinaire, et afin de prendre en charge l'authentification par les pairs (en demandant au système d'exploitation qui tente de se connecter), il crée un utilisateur et une base de données avec l'utilisateur qui exécute le processus d'initialisation. Dans ce cas, c'était votre utilisateur normal.
Je suis resté coincé sur ce problème après avoir exécuté brew services stop postgresql
la veille.
le jour suivant: {[1] } ne fonctionnerait pas. C'est parce que comme cela est montré lorsque vous installez en utilisant homebrew. postgresql utilise un launchd ... qui se charge lorsque votre ordinateur est sous tension.
résolution:brew services start postgresql
Redémarrez votre ordinateur.
La commande \du
retourne:
Nom du rôle =
postgres@implicit_files
Et cette commande postgres=# \password postgres
renvoie l'erreur:
Erreur: le rôle "postgres" n'existe pas.
Mais que postgres=# \password postgres@implicit_files
fonctionne bien.
Aussi après sudo -u postgres createuser -s postgres
la première variante du travail.