Créateur: impossible de se connecter à la base de données postgres: FATAL: le rôle «tom» n'existe pas

92

J'essaie de configurer Postgres pour la première fois et je dois créer un utilisateur avec des autorisations pour lire et créer des bases de données. Cependant, lorsque j'utilise:

createuser username

dans mon terminal, je reçois le message suivant:

createuser: impossible de se connecter à la base de données postgres: FATAL: le rôle "tom" n'existe pas

Tom est mon compte utilisateur Ubuntu auquel je suis connecté en ce moment. J'essaie de créer un nom d'utilisateur de "postgres" puis de faire un psql -U psql template1pour que je puisse créer une base de données et lui attribuer un propriétaire pour mon application Rails.

Tom Maxwell
la source
Essayez-vous vraiment de créer un utilisateur «postgres»? Ou juste un utilisateur pour votre application Rails? Normalement, l'utilisateur «postgres» existe déjà et le problème est simplement de s'y connecter pour faire ce dont vous avez besoin.
ostergaard

Réponses:

132

Vous avez mentionné Ubuntu donc je vais supposer que vous avez installé les packages PostgreSQL d'Ubuntu via apt.

Si tel est le cas, le postgrescompte utilisateur PostgreSQL existe déjà et est configuré pour être accessible via l' peerauthentification pour les sockets Unix dans pg_hba.conf. Vous y accédez en exécutant des commandes en tant postgresqu'utilisateur unix, par exemple:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

Tout cela est dans Ubuntu PostgreSQL documentation qui est le premier hit de Google pour "Ubuntu PostgreSQL" et est couvert dans de nombreuses questions Stack Overflow.

(Vous avez rendu cette question beaucoup plus difficile à répondre en omettant des détails tels que le système d'exploitation et la version que vous utilisez, comment vous avez installé PostgreSQL, etc.)

Craig Ringer
la source
bien après avoir créé owning_user, comment vous connectez-vous avec cet utilisateur? Je veux dire pour connecter l'utilisateur par défaut que j'utilise, sudo -u postgres psql postgres. de la même manière comment se connecter owning_user?
Jony
2
Trois options. (a) Définir un mot de passe pour cet utilisateur et modifier pg_hba.confpour utiliser l' md5authentification pour cet utilisateur (voir le manuel); (b) Créer un utilisateur OS du même nom et continuer à utiliser peerauth; ou (c) plus avancé, créez un pg_ident.confmappage pour permettre à l'utilisateur de votre système d'exploitation de se connecter en tant que nouvel utilisateur.
Craig Ringer
66

Voir git gist avec des instructions ici

Lance ça:

 sudo -u postgres psql

OU

psql -U postgres

dans votre terminal pour entrer dans postgres

NB: Si vous êtes sur un Mac et que les deux commandes ci-dessus ont échoué, passez à la section sur Mac ci-dessous

postgres=#

Courir

CREATE USER new_username;

Remarque: remplacez new_username par l'utilisateur que vous souhaitez créer, dans votre cas, ce sera tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Puisque vous souhaitez que cet utilisateur puisse créer une base de données, vous devez modifier le rôle en superutilisateur

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Pour confirmer, tout a réussi,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | {}
postgres         | Superuser, Create role, Create DB, Replication | {}
root             | Superuser, Create role, Create DB              | {}

postgres=# 

Mise à jour / modification (pour Mac):

J'ai récemment rencontré une erreur similaire sur mon Mac:

psql: FATAL: role "postgres" does not exist

En effet, mon installation a été configurée avec un superutilisateur de base de données dont le nom de rôle est le même que votre nom de connexion (court).

Mais certains scripts Linux supposent que le super-utilisateur a le nom de rôle traditionnel de postgres

Comment ai-je résolu ce problème?

Si vous avez installé avec homebrewrun:

/usr/local/opt/postgres/bin/createuser -s postgres

Si vous utilisez une version spécifique de postgres, dites 10.5alors exécutez:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

OU:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

OU:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

Si vous avez installé avec postgres.apppour Mac, exécutez:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

PS: remplacez 10.5 par votre version PostgreSQL

user3402754
la source
Cela a fonctionné pour entrer dans postgres:psql -U postgres
leontalbot
29
sudo -u postgres createuser -s tom 

cela devrait vous aider car cela se produira si l'administrateur n'a pas créé de compte utilisateur PostgreSQL pour vous. Il se peut également que vous ayez reçu un nom d'utilisateur PostgreSQL différent du nom d'utilisateur de votre système d'exploitation, dans ce cas, vous devez utiliser le commutateur -U.

Tanmay
la source
7

1- Connectez-vous en tant qu'utilisateur PostgreSQL par défaut (postgres)

sudo -u postgres -i

2- En tant qu'utilisateur postgres. Ajouter un nouvel utilisateur de base de données à l'aide de la createusercommande

[postgres]$ createuser --interactive

3 sorties

[postgres]$ exit
Saman Mohamadi
la source
5

Votre erreur est publiée dans la documentation officielle. Vous pouvez lire cet article .

J'ai copié la raison pour vous (et mis en hyperlien les URL) de cet article:

Cela se produira si l'administrateur n'a pas créé de compte utilisateur PostgreSQL pour vous. (Les comptes d'utilisateurs PostgreSQL sont distincts des comptes d'utilisateurs du système d'exploitation.) Si vous êtes l'administrateur, reportez-vous au chapitre 20 pour obtenir de l'aide sur la création de comptes. Vous devrez devenir l'utilisateur du système d'exploitation sous lequel PostgreSQL a été installé (généralement postgres) pour créer le premier compte utilisateur. Il se peut également que vous ayez reçu un nom d'utilisateur PostgreSQL différent du nom d'utilisateur de votre système d'exploitation; dans ce cas, vous devez utiliser le commutateur -U ou définir la variable d'environnement PGUSER pour spécifier votre nom d'utilisateur PostgreSQL

Pour vos besoins, vous pouvez faire:

1) Créez un compte utilisateur PostgreSQL:

sudo -u postgres createuser tom -d -P

(l' -Poption pour définir un mot de passe; le-d option permettant de créer une base de données pour votre nom d'utilisateur 'tom'. Notez que 'tom' est le nom d'utilisateur de votre système d'exploitation. De cette façon, vous pouvez exécuter des commandes PostgreSQL sans sudoing.)

2) Vous devriez maintenant pouvoir exécuter createdbet d'autres commandes PostgreSQL.

Rocky Inde
la source
1

J'ai eu le même problème, je fais juste ça

sudo su - postgres

createuser odoo -U postgres -dRSP #P pour le mot de passe ( odoo ou nom d'utilisateur que vous souhaitez donner à l'accès postgres)

Sagar T
la source
0

Si vous ne voulez pas changer la méthode d'authentification (ident) et jouer avec pg_hba.conf utilisez ceci:

Première connexion en tant qu'utilisateur par défaut

 sudo su - posgres

puis accédez à psql et créez un utilisateur avec le même nom que celui auquel vous vous connectez

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

vous pouvez vérifier votre utilisateur avec les rôles correspondants avec

postgres=#  \du

Après cela, vous pouvez créer votre base de données et la vérifier avec

psql -d dbName
\l
\q
Eduardo Hernández
la source
-4

Vous devez d'abord exécuter initdb. Il créera le cluster de base de données et la configuration initiale

Voir Comment configurer postgresql pour la première fois? et http://www.postgresql.org/docs/8.4/static/app-initdb.html

Jean-Marie
la source
5
Ceci est complètement incorrect. Si l'utilisateur ne s'était pas exécuté, initdbil n'aurait pas de serveur de base de données en cours d'exécution et d'acceptation des connexions afin de produire le message d'erreur signalé. Veuillez supprimer cette réponse trompeuse. (BTW, à l'avenir, veuillez créer un lien vers / docs / current / static / pour éviter l'accumulation de liens périmés)
Craig Ringer