Createuser: Verbindung zu Datenbank-Postgres konnte nicht hergestellt werden: FATAL: Rolle "tom" existiert nicht

89

Ich versuche zum ersten Mal, Postgres einzurichten, und ich muss einen Benutzer mit Berechtigungen zum Lesen und Erstellen von Datenbanken erstellen. Wenn ich jedoch benutze:

createuser username

In meinem Terminal wird folgende Meldung angezeigt:

createuser: konnte keine Verbindung zur Datenbank herstellen postgres: FATAL: Rolle "tom" existiert nicht

Tom ist mein Ubuntu-Benutzerkonto, bei dem ich gerade angemeldet bin. Ich versuche, einen Benutzernamen für "postgres" zu erstellen, und mache dann einen, psql -U psql template1damit ich eine Datenbank erstellen und ihr einen Eigentümer für meine Rails-App zuweisen kann.

Tom Maxwell
quelle
Versuchen Sie wirklich, einen Postgres-Benutzer zu erstellen? Oder nur ein Benutzer für Ihre Rails-App? Normalerweise existiert der Benutzer 'postgres' bereits und das Problem besteht darin, nur eine Verbindung herzustellen, um das zu tun, was Sie benötigen.
Ostergaard

Antworten:

127

Sie haben Ubuntu erwähnt, also werden Sie wahrscheinlich die PostgreSQL-Pakete von Ubuntu über apt installiert haben.

In diesem postgresFall ist das PostgreSQL-Benutzerkonto bereits vorhanden und so konfiguriert, dass über die peerAuthentifizierung für Unix-Sockets in zugegriffen werden kann pg_hba.conf. Sie erreichen dies, indem Sie Befehle als postgresUnix-Benutzer ausführen , z.

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

Dies alles ist in der Ubuntu PostgreSQL- Dokumentation enthalten, die der erste Google-Hit für "Ubuntu PostgreSQL" ist und in zahlreichen Fragen zum Stapelüberlauf behandelt wird.

(Sie haben die Beantwortung dieser Frage erheblich erschwert, indem Sie Details wie das Betriebssystem und die Version, auf der Sie sich befinden, wie Sie PostgreSQL installiert haben usw. weggelassen haben.)

Craig Ringer
quelle
Nun, nachdem Sie owning_user erstellt haben, wie verbinden Sie sich mit diesem Benutzer? Ich meine, um den Standardbenutzer zu verbinden, den ich benutze, sudo -u postgres psql postgres. auf die gleiche Weise, wie man owning_user verbindet?
Jony
2
Drei Optionen. (a) Legen Sie ein Kennwort für diesen Benutzer fest und bearbeiten Sie es pg_hba.conf, um die md5Authentifizierung für diesen Benutzer zu verwenden (siehe Handbuch). (b) Erstellen Sie einen Betriebssystembenutzer mit demselben Namen und verwenden Sie weiterhin peerauth. oder (c) fortgeschrittener erstellen Sie eine pg_ident.confZuordnung, damit sich Ihr Betriebssystembenutzer als neuer Benutzer anmelden kann.
Craig Ringer
64

Siehe git gist mit Anweisungen hier

Führen Sie Folgendes aus:

 sudo -u postgres psql

ODER

psql -U postgres

in Ihrem Terminal, um in Postgres zu gelangen

NB: Wenn Sie auf einem Mac arbeiten und beide oben genannten Befehle fehlgeschlagen sind, springen Sie zum Abschnitt über Mac unten

postgres=#

Lauf

CREATE USER new_username;

Hinweis: Ersetzen Sie new_username durch den Benutzer, den Sie erstellen möchten. In Ihrem Fall ist dies tom.

postgres=# CREATE USER new_username;
CREATE ROLE

Da dieser Benutzer eine Datenbank erstellen kann, müssen Sie die Rolle in Superuser ändern

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

Zur Bestätigung war alles erfolgreich,

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=# 

Update / Änderung (für Mac):

Ich habe kürzlich einen ähnlichen Fehler auf meinem Mac festgestellt:

psql: FATAL: role "postgres" does not exist

Dies lag daran, dass meine Installation mit einem Datenbank-Superuser eingerichtet wurde, dessen Rollenname mit Ihrem Anmeldenamen (Kurzname) übereinstimmt.

Einige Linux-Skripte gehen jedoch davon aus, dass der Superuser den traditionellen Rollennamen hat postgres

Wie habe ich das gelöst?

Wenn Sie mit homebrewrun installiert haben :

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

Wenn Sie eine bestimmte Version von Postgres verwenden, führen Sie Folgendes 10.5aus:

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

ODER:

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

ODER:

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

Wenn Sie mit postgres.appfür Mac installiert haben, führen Sie Folgendes aus:

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

PS: Ersetzen Sie 10.5 durch Ihre PostgreSQL-Version

user3402754
quelle
Dies funktionierte, um in Postgres zu gelangen:psql -U postgres
Leontalbot
28
sudo -u postgres createuser -s tom 

Dies sollte Ihnen helfen, da dies passieren wird, wenn der Administrator kein PostgreSQL-Benutzerkonto für Sie erstellt hat. Es kann auch sein, dass Ihnen ein PostgreSQL-Benutzername zugewiesen wurde, der sich von Ihrem Betriebssystembenutzernamen unterscheidet. In diesem Fall müssen Sie den Schalter -U verwenden.

Tanmay
quelle
7

1- Melden Sie sich als Standard-PostgreSQL-Benutzer an (postgres)

sudo -u postgres -i

2- Als Postgres-Benutzer. Fügen Sie mit dem createuserBefehl einen neuen Datenbankbenutzer hinzu

[postgres]$ createuser --interactive

3-Ausgang

[postgres]$ exit
Saman Mohamadi
quelle
5

Ihr Fehler wird in der offiziellen Dokumentation veröffentlicht. Sie können diesen Artikel lesen .

Ich habe den Grund für Sie aus diesem Artikel kopiert (und die URLs verlinkt):

Dies geschieht, wenn der Administrator kein PostgreSQL-Benutzerkonto für Sie erstellt hat. (PostgreSQL-Benutzerkonten unterscheiden sich von Benutzerkonten des Betriebssystems.) Wenn Sie Administrator sind, finden Sie in Kapitel 20 Hilfe zum Erstellen von Konten. Sie müssen der Betriebssystembenutzer sein, unter dem PostgreSQL installiert wurde (normalerweise postgres), um das erste Benutzerkonto zu erstellen. Es kann auch sein, dass Ihnen ein PostgreSQL-Benutzername zugewiesen wurde, der sich von Ihrem Betriebssystembenutzernamen unterscheidet. In diesem Fall müssen Sie den Schalter -U verwenden oder die Umgebungsvariable PGUSER festlegen, um Ihren PostgreSQL-Benutzernamen anzugeben

Für Ihre Zwecke können Sie Folgendes tun:

1) Erstellen Sie ein PostgreSQL-Benutzerkonto:

sudo -u postgres createuser tom -d -P

(Die -POption zum Festlegen eines Kennworts; Die -dOption zum Erstellen einer Datenbank für Ihren Benutzernamen 'tom'. Beachten Sie, dass 'tom' der Benutzername Ihres Betriebssystems ist. Auf diese Weise können Sie PostgreSQL-Befehle ausführen, ohne sudoing.)

2) Jetzt sollten Sie in der Lage sein, createdbandere PostgreSQL-Befehle auszuführen.

Rocky Inde
quelle
1

Ich hatte das gleiche Problem, ich mache das einfach

sudo su - postgres

createuser odoo -U postgres -dRSP #P für Passwort ( odoo oder Benutzername , den Sie möchten, um dem postgres Zugriff zu gewähren)

Sagar T.
quelle
-4

Sie müssen zuerst initdb ausführen. Es wird der Datenbankcluster und die Ersteinrichtung erstellt

Siehe So konfigurieren Sie postgresql zum ersten Mal. und http://www.postgresql.org/docs/8.4/static/app-initdb.html

Jean-Marie
quelle
5
Das ist völlig falsch. Wenn der Benutzer nicht ausgeführt worden initdbwäre, würde kein Datenbankserver ausgeführt und Verbindungen akzeptiert, um die gemeldete Fehlermeldung zu erzeugen. Bitte entfernen Sie diese irreführende Antwort. (Übrigens, in Zukunft bitte auf / docs / current / static / verlinken, um zu verhindern, dass sich veraltete Links ansammeln)
Craig Ringer