Je suis un novice postgres.
J'ai installé le postgres.app pour mac. Je jouais avec les commandes psql et j'ai accidentellement abandonné la base de données postgres. Je ne sais pas ce qu'il y avait dedans.
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
$ quel psql
/Applications/Postgres.app/Contents/MacOS/bin/psql
C’est ce qui est imprimé en 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)
Alors, quelles sont les étapes à suivre? Supprimer tout ce qui concerne psql et tout réinstaller?
Merci pour l'aide les gars!
REMARQUE: Si vous avez installé postgres en utilisant homebrew, reportez-vous au commentaire de @ user3402754 ci-dessous.
Notez que le message d'erreur NOT parle d'une base de données manquante, il parle d'un rôle manquant. Plus tard dans la procédure de connexion, il pourrait é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 pertinente ressemble à ceci:
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
S'il n'y a pas au moins un rôle avec superuser
, alors vous avez un problème :-)
S'il y en a un, vous pouvez l'utiliser pour vous connecter. Et en regardant le résultat 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
. Je pense donc que votre configuration simple utilise user
en tant que superutilisateur. Vous pouvez donc essayer cette commande pour vous connecter:
Sudo -u user psql user
Si user
est vraiment le superutilisateur de la base de données, vous pouvez créer un autre superutilisateur de la base de données et une base de données privée et vide pour lui:
CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;
Mais puisque votre configuration de postgres.app ne semble pas faire cela, vous ne devriez pas non plus. Simple adapter le tutoriel.
La clé est "J'ai installé le postgres.app pour mac." Cette application configure l’installation locale de PostgreSQL avec un superutilisateur de base de données dont le nom de rôle est identique à votre nom de connexion (nom abrégé).
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.
Certains scripts (par exemple, une sauvegarde de base de données créée avec pgdump
sur un système Linux) et des didacticiels supposent que le super-utilisateur porte le nom de rôle traditionnel postgres
.
Vous pouvez rendre votre installation locale un peu plus traditionnelle et éviter ces problèmes en effectuant une opération unique:
/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres
qui fera que ceux FATAL: le rôle "postgres" n’existe pas disparaissent.
Pour Mac:
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.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, c'est configuré, connectez-vous avec psql -U postgres -h localhost
ou utilisez PgAdmin pour l'interface graphique.
Par défaut, l'utilisateur postgres
n'aura aucun mot de passe de connexion.
Consultez ce site pour plus d'articles comme celui-ci: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
createuser postgres --interactive
ou faire un post-utilisateur de superutilisateur juste avec
createuser postgres -s
Pour moi, ce code a fonctionné:
/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres
ça venait d'ici: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
Tout 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
Changez $USER
en votre nom d'utilisateur système.
Vous pouvez voir la solution complète ici .
Cela se produit lorsque vous exécutez initdb
avec un utilisateur dont l'ID n'est pas postgres
, sans spécifier le nom d'utilisateur postgres
avec --username=postgres
ou -U postgres
.
Le cluster de base de données est ensuite créé avec le compte d'utilisateur du système que vous avez utilisé pour exécuter initdb et des autorisations de superutilisateur lui sont attribuées.
Pour résoudre ce problème, créez simplement un nouvel utilisateur nommé postgres
avec l'option --superuser
à l'aide de l'utilitaire createuser
fourni avec Postgres. Cet utilitaire se trouve dans le répertoire bin
de Postgres. par exemple.
createuser --superuser postgres
Si vous avez un nom d’hôte ou un port personnalisé, assurez-vous de définissez les options appropriées .
N'oubliez pas de supprimer l'autre compte d'utilisateur créé pour vous par initdb.
J'avais besoin de désarmer $PGUSER
:
$ unset PGUSER
$ createuser -s postgres
Exécuter ceci sur la ligne de commande devrait résoudre le problème
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
Pour ce que ça vaut, j’ai Ubuntu et de nombreux paquets installés et il est entré en conflit avec ça.
Pour moi, la bonne réponse était:
Sudo -i -u postgres-xc
psql
Supprimer la base de données postgres
n'a pas d'importance. Cette base de données est initialement vide et son but est simplement que l'utilisateur postgres
puisse se connecter à une sorte de "maison", le cas échéant.
Vous pouvez néanmoins 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. postgres.app
est exécuté 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 de simplement émettre: psql
, qui se connecte automatiquement à une base de données correspondant au nom de vos utilisateurs, et avec un compte db de le même nom qui se trouve être superutilisateur, donc il peut faire quoi que ce soit en termes d'autorisations.
C'est le seul qui l'a corrigé pour moi:
createuser -s -U $USER
Sur le système Ubuntu, j'ai purgé PostgreSQL et je l'ai réinstallé. Toutes les bases de données sont restaurées. Cela a résolu le problème pour moi.
Conseil - Faites une sauvegarde des bases de données pour être plus sûr.
Je suis resté bloqué sur cette question après avoir exécuté brew services stop postgresql
le jour précédent.
Le jour suivant: brew services start postgresql
ne fonctionnerait pas. En effet, comme indiqué lors de l'installation à l'aide de homebrew. postgresql utilise un launchd ... qui se charge lorsque votre ordinateur est allumé.
résolution:brew services start postgresql
Redémarrez votre ordinateur.
La commande \du
renvoie:
Nom du rôle =
postgres@implicit_files
Et cette commande postgres=# \password postgres
renvoie une erreur:
ERREUR: le rôle "postgres" n'existe pas.
Mais ce postgres=# \password postgres@implicit_files
fonctionne bien.
De plus, après Sudo -u postgres createuser -s postgres
, la première variante fonctionne également.
Je ne pense pas que Sudo soit nécessaire ici car psql -l renvoie une liste de bases de données. Cela me dit que initdb a été exécuté sous l'utilisateur actuel de l'utilisateur, et non sous l'utilisateur postgres.
Vous pouvez simplement:
psql
Et continuez le tutoriel.
Je suggérerais les points généraux de A.H sur la création de l'utilisateur postgres et de la base de données, car de nombreuses applications peuvent s'attendre à ce que cela existe.
Une brève explication:
PostgreSQL ne fonctionnera pas avec un accès administratif au système d'exploitation. Au lieu de cela, il fonctionne avec un utilisateur ordinaire. Afin de prendre en charge l'authentification entre 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.