Ich bin ein Postgres-Neuling.
Ich habe die postgres.app für Mac installiert. Ich habe mit den psql-Befehlen herumgespielt und versehentlich die postgres-Datenbank gelöscht. Ich weiß nicht, was drin war.
Ich arbeite derzeit an einem Tutorial: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/
Und ich stecke fest sudo -u postgres psql postgres
FEHLERMELDUNG: psql: FATAL: role "postgres" does not exist
$ welche psql
/Applications/Postgres.app/Contents/MacOS/bin/psql
Daraus wird gedruckt 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)
Also, was sind die Schritte, die ich unternehmen sollte? Alles, was mit psql zu tun hat, löschen und alles neu installieren?
Danke für die Hilfe Jungs!
macos
postgresql
terminal
user805981
quelle
quelle
brew services start postresql
ausgeführt wird.Antworten:
HINWEIS: Wenn Sie Postgres mit Homebrew installiert haben, lesen Sie den Kommentar von @ user3402754 unten.
Beachten Sie, dass die Fehlermeldung NICHT über eine fehlende Datenbank, sondern über eine fehlende Rolle spricht. Später im Anmeldevorgang kann es auch vorkommen, dass Sie über die fehlende Datenbank stolpern.
Der erste Schritt besteht jedoch darin, die fehlende Rolle zu überprüfen: Was ist die Ausgabe innerhalb
psql
des Befehls\du
? Auf meinem Ubuntu-System sieht die entsprechende Zeile folgendermaßen aus:Wenn es nicht mindestens eine Rolle gibt
superuser
, dann hast du ein Problem :-)Wenn es eine gibt, können Sie sich damit anmelden. Und schauen Sie sich die Ausgabe Ihres
\l
Befehls an: Die Berechtigungen füruser
dietemplate0
undtemplate1
-Datenbanken sind die gleichen wie auf meinem Ubuntu-System für den Superuserpostgres
. Ich denke, Ihr Setup wird einfachuser
als Superuser verwendet. Sie können also diesen Befehl versuchen, um sich anzumelden:Wenn
user
es sich wirklich um den DB-Superuser handelt, können Sie einen weiteren DB-Superuser und eine private, leere Datenbank für ihn erstellen:Da Ihr postgres.app-Setup dies jedoch nicht zu tun scheint, sollten Sie dies auch nicht tun. Passen Sie das Tutorial einfach an.
quelle
CREATE USER postgres WITH SUPERUSER PASSWORD 'password';
mit postgres v10.homebrew
dann installiert haben , müssen Sie/usr/local/opt/postgres/bin/createuser -s postgres
in Ihrem Terminal/usr/local/opt/postgresql/bin/createuser -s postgres
/usr/local/opt/postgresql@11/bin/createuser -s postgres
Der Schlüssel lautet "Ich habe die postgres.app für Mac installiert." Diese Anwendung richtet die lokale PostgreSQL-Installation mit einem Datenbank-Superuser ein, dessen Rollenname mit Ihrem Anmeldenamen (Kurzname) übereinstimmt.
Einige Skripte (z. B. eine Datenbanksicherung, die mit
pgdump
einem Linux-System erstellt wurde) und Tutorials setzen voraus, dass der Superuser den traditionellen Rollennamen hatpostgres
.Sie können Ihre lokale Installation etwas traditioneller gestalten und diese Probleme durch einmaliges Ausführen vermeiden:
was dazu führen wird, dass diese FATAL: Rolle "Postgres" nicht existiert , verschwinden .
quelle
/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres
(natürlich für Version 9.2.4)./Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres
lief richtig für mich.brew link postgresql
nach der Installation ausführen, müssen Sie nicht den gesamten Pfad anhängencreateuser
, ein einfachercreateuser -s postgres
wird großartig funktionierencreateuser -s postgres
arbeitete für mich. Ich habe Postgres mit Homebrew installiertFür MAC:
brew install postgres
initdb /usr/local/var/postgres
/usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres
oder/usr/local/opt/postgres/bin/createuser -s postgres
die nur die neueste Version verwenden.pg_ctl -D /usr/local/var/postgres start
Server beim Start starten
mkdir -p ~/Library/LaunchAgents
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Jetzt wird es eingerichtet, mit
psql -U postgres -h localhost
PgAdmin für die GUI angemeldet oder verwendet.Standardmäßig hat der Benutzer
postgres
kein Anmeldekennwort.Weitere Artikel wie diesen finden Sie auf dieser Website: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7
quelle
brew services start postgresql
Brauinstallation können Sie Postgres startenoder mache einen superuser postgresl nur mit
quelle
Dies geschieht, wenn Sie
initdb
mit einem Benutzer ausgeführt werden, dessen ID nicht lautetpostgres
, ohne denpostgres
Benutzernamen mit--username=postgres
oder anzugeben-U postgres
.Der Datenbankcluster wird dann mit dem Benutzerkonto des Systems erstellt, mit dem Sie initdb ausgeführt haben, und erhält Superuser-Berechtigungen.
Um dies zu beheben, erstellen Sie einfach einen neuen Benutzer
postgres
mit der Option--superuser
mit demcreateuser
mit Postgres gelieferten Dienstprogramm. Das Dienstprogramm befindet sich im Postgres-bin
Verzeichnis. z.BWenn Sie einen benutzerdefinierten Hostnamen oder Port haben, müssen Sie die entsprechenden Optionen festlegen .
Vergessen Sie nicht, das andere Benutzerkonto zu löschen, das von initdb für Sie erstellt wurde.
quelle
Bei mir hat dieser Code funktioniert:
es kam von hier: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4
quelle
Ich musste deaktivieren
$PGUSER
:quelle
Zuerst müssen Sie einen Benutzer erstellen:
Nachdem Sie eine Datenbank erstellt haben:
Ändern Sie
$USER
Ihren Systembenutzernamen.Die komplette Lösung sehen Sie hier .
quelle
Wenn Sie dies in der Befehlszeile ausführen, sollte dies behoben sein
/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>
quelle
Das Löschen der
postgres
Datenbank spielt keine Rolle. Diese Datenbank ist anfangs leer und dient lediglich dazu, dass derpostgres
Benutzer eine Art "Zuhause" hat, mit dem er sich verbinden kann, falls er eines benötigt.Sie können es dennoch mit dem SQL-Befehl neu erstellen
CREATE DATABASE postgres;
Beachten Sie, dass das in der Frage erwähnte Tutorial nicht
postgres.app
für diesen Zweck geschrieben wurde. Im Gegensatz zu PostgreSQL für Unix im Allgemeinen wirdpostgres.app
versucht, wie eine normale Anwendung auszusehen, im Gegensatz zu einem Dienst, der von einem dediziertenpostgres
Benutzer ausgeführt wird, der andere Berechtigungen als Ihr normaler Benutzer hat.postgres.app
wird von Ihrem eigenen Konto ausgeführt und verwaltet.Anstelle dieses Befehls:
sudo -u postgres psql -U postgres
wäre es eher im Sinne von postgres.app, nur: auszugebenpsql
, das automatisch eine Verbindung zu einer Datenbank herstellt, die dem Namen Ihres Benutzers entspricht, und mit einem DB-Konto mit demselben Namen, das zufällig Superuser ist Es kann alles tun, was die Berechtigungen betrifft.quelle
ERROR: cannot drop the currently open database
wenn ich versuche, die Benutzerdatenbank zu löschen? Ist es also nicht eine gute Praxis, diese postgres.app zu verwenden?Postgres.app
dient zu Test- und Entwicklungszwecken; Es handelt sich um ein PostgreSQL-Paket von Heroku, das Mac-Benutzern, die mit Ruby on Rails entwickeln, das Testen mit PostgreSQL anstelle von Standard-SQLite erleichtern soll. Rails verwendet dazu, mit SQLite zu testen und auf PostgreSQL bereitzustellen, was alle möglichen Probleme verursachte. Deshalb versuchte Heroku, das Testen auch auf PostgreSQL zu vereinfachen.Postgres.app
ist gut zum Testen, aber ich würde nicht in Betracht ziehen, es für die Produktion oder für echte Daten zu verwenden, das ist einfach nicht das, wofür es ist.Für das, was es wert ist, habe ich Ubuntu und viele Pakete installiert und es ging in Konflikt damit.
Für mich war die richtige Antwort:
quelle
Dies ist der einzige, der es für mich behoben hat:
quelle
sudo
, um temporäre Superuser-Berechtigungen zu erhalten.Auf dem Ubuntu-System habe ich PostgreSQL gelöscht und neu installiert. Alle Datenbanken werden wiederhergestellt. Dies löste das Problem für mich.
Hinweis - Nehmen Sie die Sicherung der Datenbanken, um die Sicherheit zu gewährleisten.
quelle
Ich denke nicht, dass sudo hier benötigt wird, weil psql -l eine Liste von Datenbanken zurückgibt. Dies sagt mir, dass initdb unter dem aktuellen Benutzer des Benutzers ausgeführt wurde, nicht unter dem Benutzer postgres.
Sie können einfach:
Und setzen Sie das Tutorial fort.
Ich würde AHs allgemeine Punkte zum Erstellen des Postgres-Benutzers und der Datenbank vorschlagen, da viele Anwendungen dies möglicherweise erwarten.
Eine kurze Erklärung:
PostgreSQL wird nicht mit Administratorzugriff auf das Betriebssystem ausgeführt. Stattdessen wird es mit einem normalen Benutzer ausgeführt. Um die Peer-Authentifizierung zu unterstützen (indem das Betriebssystem gefragt wird, wer versucht, eine Verbindung herzustellen), werden ein Benutzer und eine Datenbank mit dem Benutzer erstellt, der den Initialisierungsprozess ausführt. In diesem Fall war es Ihr normaler Benutzer.
quelle
Ich blieb in dieser Angelegenheit stecken, nachdem ich am
brew services stop postgresql
Tag zuvor hingerichtet hatte .Der folgende Tag:
brew services start postgresql
würde nicht funktionieren. Dies liegt daran, wie bei der Installation mit Homebrew gezeigt wird. postgresql verwendet ein launchd ..., das geladen wird, wenn Ihr Computer eingeschaltet wird.Lösung:
brew services start postgresql
Starten Sie Ihren Computer neu.
quelle
Der
\du
Befehl return:Und dieser Befehl gibt einen
postgres=# \password postgres
Fehler zurück:Aber das
postgres=# \password postgres@implicit_files
läuft gut.Auch nach
sudo -u postgres createuser -s postgres
der ersten Variante funktioniert das auch.quelle