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!

239
demandé sur Daniil Ryzhkov 2013-03-08 23:31:57

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.

251
répondu A.H. 2013-03-09 10:13:04

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.

211
répondu jwd630 2016-04-19 18:24:24

Pour MAC:

  1. Installer Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /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.
  5. 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

148
répondu Nitin 2018-08-21 22:12:13

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

15
répondu Kevin Zhao 2015-05-06 20:09:37
createuser postgres --interactive

Ou faire un superutilisateur postgresl juste avec

createuser postgres -s
15
répondu SyntheticMeshwork 2017-08-10 20:10:51

D'Abord vous devez créer un utilisateur:

sudo -u postgres createuser --superuser $USER

Après vous créez une base de données:

sudo -u postgres createdb $USER

Changement $USER pour votre système de nom d'utilisateur.

Vous pouvez voir la solution complète ici.

9
répondu ruzenhack 2017-11-15 05:46:07

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>

7
répondu Alex Levine 2015-02-13 21:41:52

J'avais besoin de désactiver $PGUSER:

$ unset PGUSER
$ createuser -s postgres
6
répondu Beau Barker 2018-01-02 06:54:28

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.

4
répondu Daniel Vérité 2013-03-08 20:53:25

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
3
répondu softwareplay 2017-01-11 15:37:40

C'est le seul qui l'a corrigé pour moi:

createuser -s -U $USER
1
répondu Bax 2016-03-02 00:10:20

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.

0
répondu Chris Travers 2013-03-09 14:36:59

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.

0
répondu Michael Dimmitt 2017-06-26 12:33:53

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.

0
répondu Michael 2018-06-28 08:39:47