L'utilisateur Postgres n'existe pas?


90

Je viens d'installer Postgres et j'ai bricolé avec lui et diverses configurations pendant 1 à 2 heures.

Je suis bloqué sur l' impossibilité de passer à l'utilisateur postgres

$ su - postgres renvoie l'erreur suivante: su: unknown login: postgres

$ sudo -u postgres psql renvoie l'erreur suivante: sudo: unknown user: postgres

Ces tentatives sont effectuées en tant qu'utilisateur normal. Les essayer en tant que root a exactement les mêmes résultats. J'ai installé postgres via Homebrew sur OS X et j'ai lu les instructions plusieurs fois.


Essayez-vous simplement d'exécuter psql?
danielM

Eh bien oui, je veux courir en tant postgresqu'utilisateur approprié .
krystah le

Sur certaines versions de Mac OS X, avec certaines méthodes d'installation, je pense que l'utilisateur est créé comme à la postgres_place. Notez le trait de soulignement de fin. De plus, êtes-vous sûr que vous (ou l'installateur) avez réellement créé l'instance PostgreSQL et démarré la base de données?
Craig Ringer

1
J'étais trop incapable de passer à l' postgresutilisateur. Résolution du problème après l'installation du postgresql-serverpackage.
sergio

Réponses:


90

psql: Me connecte avec mon nom d'utilisateur par défaut

psql -U postgres: Me connecte en tant qu'utilisateur postgres

Sudo ne semble pas nécessaire pour moi.

J'utilise Postgres.app pour ma base de données postgres OS X. Cela a éliminé le mal de tête de s'assurer que l'installation fonctionnait et que le serveur de base de données était correctement lancé. Découvrez-le ici: http://postgresapp.com

Edit: Merci à @Erwin Brandstetter pour avoir corrigé mon utilisation des arguments.


8
J'ai installé en utilisant Brew et cela n'a pas créé un utilisateur appelé postgres ou _postgres (pour autant que je puisse le voir), donc cela a échoué pour moi. @kangkyu solution explique et vous guide à travers les problèmes - en supposant que vous n'avez pas d'utilisateur postgres alors: psql postgreset psql -d postgres.
notapatch

21

Par psql --help, lorsque vous n'avez pas défini d'options pour le nom de la base de données (sans -doption), ce serait votre nom d'utilisateur, si vous ne l'avez pas fait -U, le nom d'utilisateur de la base de données serait également votre nom d'utilisateur, etc.

Mais par la commande initdb(pour créer la première base de données), il n'a pas votre nom d'utilisateur comme nom de base de données. Il a une base de données nommée postgres. La première base de données est toujours créée par la commande initdb lorsque la zone de stockage de données est initialisée. Cette base de données s'appelle postgres.

Donc, si vous n'avez pas d'autre base de données nommée votre nom d'utilisateur, vous devez le faire psql -d postgrespour que la commande psql fonctionne. Et il semble que cela donne une -doption par défaut, psql postgresfonctionne également.

Si vous avez créé une autre base de données dont le nom est identique à votre nom d'utilisateur, (cela devrait être fait avec createdb), vous ne pouvez commander psqlque. Et il semble que le premier nom d'utilisateur de la base de données soit défini comme nom d'utilisateur de votre machine par brassage.

psql -d <first database name> -U <first database user name>

ou,

psql -d postgres -U <your machine username>
psql -d postgres

fonctionnerait par défaut.


18

OS X a tendance à préfixer les noms de compte système par "_"; vous ne dites pas quelle version d'OS X vous utilisez, mais au moins dans 10.8 et 10.9 l'utilisateur _postgres existe dans une installation par défaut. Notez que vous ne pourrez pas accéder suà ce compte (sauf en tant que root), car il n'a pas de mot de passe. sudo -u _postgres, d'autre part, devrait fonctionner correctement.


Merci! C'est la réponse que je cherchais. Est-ce que je peux faire quelque chose pour renommer l'utilisateur en "postgres"? La connexion en tant qu'utilisateur _postgres amène psql à se plaindre du fait que l'utilisateur "_postgres" n'existe pas. J'essaie de restaurer une instance postgres propre avec un fichier de sauvegarde d'une autre base de données
Chris Reyes - he-him

1
@ChrisReyes Changer le nom des comptes système peut endommager les composants système qui les utilisent, je vous le déconseille donc fortement. Vous pouvez créer un autre compte utilisateur avec le nom «postgres» et l'utiliser, mais si je comprends bien (ce que je ne pourrais pas), ce que vous rencontrez, c'est que le compte utilisateur dans la base de données postgres n'est pas nommé _postgres. AIUI, les noms de compte dans la base de données sont séparés des noms de compte système, il ne devrait donc pas y avoir de problème pour exécuter une instance de base de données sous le compte système "_postgres" et ouvrir cette base de données avec le compte de base de données "postgres".
Gordon Davisson


3
psql -U postgres

A bien fonctionné pour moi en cas de nom de base de données: postgres & nom d'utilisateur: postgres. Vous n'avez donc pas besoin d'écrire sudo.

Et dans le cas d'une autre base de données, vous pouvez essayer

psql -U yourdb postgres

Comme indiqué dans l'aide de Postgres:

psql [OPTION]... [DBNAME [USERNAME]]

Mon cas: $ psql -U postgresgénère une sortie psql: FATAL: role "postgres" does not exist, mais psql postgresfonctionne.
Frozen Flame

3

J'obtiens exactement les mêmes erreurs que kryshah avec su - postgreset sudo -u postgres psql. La réponse de DanielM donne également des erreurs.

Sorties lorsque de mauvais paramètres

Réponse cependant du commentaire de przbabu.

masi$ psql
psql: FATAL:  database "masi" does not exist
masi$ psql -U postgres
psql: FATAL:  role "postgres" does not exist
masi$ psql postgres
psql (9.4.1)
Type "help" for help.

Je pense qu'une partie de ce problème peut être dans les paramètres du propriétaire dans OSX

masi$ ls -al /Users/
total 0
drwxr-xr-x   7 root      admin  238 Jul  3 09:50 .
drwxr-xr-x  37 root      wheel 1326 Jul  2 19:02 ..
-rw-r--r--   1 root      wheel    0 Sep 10  2014 .localized
drwxrwxrwt   7 root      wheel  238 Apr  9 19:49 Shared
drwxr-xr-x   2 root      admin   68 Jul  3 09:50 postgres
drwxr-xr-x+ 71 masi      staff 2414 Jul  3 09:50 masi

mais faire sudo chown -R postgres:staff /Users/postgresdonne chown: invalid user: ‘postgres:staff’.

Bref, ce n'est pas la solution du problème. Utilisez les outils fournis par l'installation de postgres pour créer un utilisateur et une base de données.

Pour obtenir les bons réglages et sorties

Il existe des commandes spécifiques après l'installation de postgres pour ajouter un nouvel utilisateur au système de base de données. Après initdb, exécutez ce qui suit comme décrit ici

createuser --pwprompt postgres
createdb -Opostgres -Eutf8 masi_development
psql -U postgres -W masi_development

Pour éviter la demande de mot de passe à tout moment, vous avez trois choix comme décrit ici .


1

Pour moi, c'était la solution sur macOS Réinstallez le psql

brew install postgres

Démarrer le serveur PostgreSQL

pg_ctl -D /usr/local/var/postgres start

Initialiser DB

initdb /usr/local/var/postgres

Si cette commande génère une erreur, rm l'ancien fichier de base de données et réexécutez la commande ci-dessus

rm -r /usr/local/var/postgres

Créer une nouvelle base de données

createdb postgres_test
psql -W postegres_test

Vous serez connecté à cette base de données et pourrez créer un utilisateur ici pour vous connecter


0

La solution est simple:
connectez-vous en tant que root
et après:

su - postgres

psql
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.