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 template1
pour que je puisse créer une base de données et lui attribuer un propriétaire pour mon application Rails.
database
postgresql
Tom Maxwell
la source
la source
Réponses:
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
postgres
compte utilisateur PostgreSQL existe déjà et est configuré pour être accessible via l'peer
authentification pour les sockets Unix danspg_hba.conf
. Vous y accédez en exécutant des commandes en tantpostgres
qu'utilisateur unix, par exemple: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.)
la source
pg_hba.conf
pour utiliser l'md5
authentification pour cet utilisateur (voir le manuel); (b) Créer un utilisateur OS du même nom et continuer à utiliserpeer
auth; ou (c) plus avancé, créez unpg_ident.conf
mappage pour permettre à l'utilisateur de votre système d'exploitation de se connecter en tant que nouvel utilisateur.Voir git gist avec des instructions ici
Lance ça:
OU
dans votre terminal pour entrer dans postgres
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
homebrew
run:/usr/local/opt/postgres/bin/createuser -s postgres
/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
/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres
PS: remplacez 10.5 par votre version PostgreSQL
la source
psql -U postgres
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.
la source
1- Connectez-vous en tant qu'utilisateur PostgreSQL par défaut (postgres)
2- En tant qu'utilisateur postgres. Ajouter un nouvel utilisateur de base de données à l'aide de la
createuser
commande[postgres]$ createuser --interactive
3 sorties
la source
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:
Pour vos besoins, vous pouvez faire:
1) Créez un compte utilisateur PostgreSQL:
(l'
-P
option 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 sanssudo
ing.)2) Vous devriez maintenant pouvoir exécuter
createdb
et d'autres commandes PostgreSQL.la source
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)
la source
Sous Windows, utilisez:
C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>
Ajouter
--superuser
ou--createdb
selon le cas.Voir https://www.postgresql.org/docs/current/static/app-createuser.html pour plus d'options.
la source
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
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
la source
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
la source
initdb
il 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)