Fehler bei erstellen mit createdb

Hallo,
bin neuling was SQL angeht. Habe mir grad PostgreSQL 8.1 installiert auf Ubuntu 6.06 und wollte dann eine DB erzeugen. Bekomme die folgende fehlermeldung.

root@subsonnic-desktop:/home/subsonnic# createdb
createdb: konnte nicht mit Datenbank postgres verbinden: FATAL: Rolle »root« existiert nicht


Ihr könnt mir da bestimmt helfen.

Gruß SubSonniC

Du möchtest diesen Befehl aus User ‘postgres’ ausführen, von root aus:

su - postgres

verstehe nich was du mir sagen willst.
su-postgres gibts nicht
und root bin ich sowieso schon falls du sudo createdb meinst.
Kannst Du da mal deutlicher werden. Danke
Gruß SubSonniC

hi SubSonniC!

eigentlich steht doch alles da. du möchtest createdb als root ausführen und postgres gibt dir zurück, das die role (also der benutzer) root nicht existiert. wenn du bei postgres keinen user angibst, nimmt er den der *nix-shell. geht hier natürlich nicht da du zwar im *nix einen root hast aber nicht in postgres.

was ads dir geschrieben hat ist, zuerst in den *nix user postgres wechseln. diesen solltest du ja haben weil er bei der installation angelegt wird bzw du den anlegen musst wenn du das per hand machst.

der user postgres ist der standard-admin-user bei postgresql. mit diesen kannst du dann auch eine database erzeugen…

cu tb.

Hallo SubSonniC,

auch wenn ads ein Zeichein (-) zuviel angegeben hat, würde einem UNIX-Freak als erstes für ‘su’ der Super User einfallen. Aber das ist nicht der Grund der Fehlermeldung.

Wie man in der Dokumentation unmißverständlich lesen kann, benötigt der Befehl createDb noch einige Parameter und die sollte man auch angeben.

Zum deinem Verständnis solltest Du den Beitrag http://www.pg-forum.de/showthread.php?t=918 lesen. Er beschreibt zwar die Installation unter Windows, im übertragenen Sinn läuft die Installtion auch so unter UNIX ab. Er wird Dir wichtige Hintergrund-Informationen liefern.



mfg

fristo

Hallo Xandrian,

nein, das muss er nicht. Als root hat er alle Rechte und kann auch createDb ausführen. Nur müssen für den Befehl createDb, entsprechend der Dokumentation, auch die notwendigen Parameter angeben. Und einer der wichtigsten Parameter ist dabei der Admin der Datenbank. Wie Du aus der Fehlermeldung erkennen kanst, heißt der nicht root.

Mit entsprechenden Nachweis, lasse ich mich gerne vom Gegenteil überzeugen!



mfg

fristo

# whoami
root
# /usr/local/pgsql/bin/createdb test
createdb: could not connect to database postgres: FATAL:  role "root" does not exist

es geht nicht mit root. alternativ könnte er mit dem parameter -U einen anderen user übergeben. das würde dann gehen… (wie du ja selbst geschrieben hast).

cu tb.

mit -U muss man immer den DB-Admin angeben. Der Schwachsinn im Installationsscript ist, dass für den Namen des DB-Admins defaultmäßig auch “postgres” verwendet. Wie Du in Installation von PostgreSQL unter Windows nachlesen kanst, wird er dort auch als interner Nutzer der Datenbank angegeben. Als interner Nutzer versteht man mit Sicherheit etwas anderes als den DB-Admin. Das ganze ist irreführend und die Ursache dafür, dass viele bei den ersten Installation immer wieder die Probleme haben.



mfg

fristo

fristo: in vielen Distributionen kann man den ‘postgres’ User, weil per ident eingestellt, auch nur als Unix User postgres ansprechen. Von daher ist die Idee, erst mal unter Unix den User zu wechseln, kein schlechter Ansatz.

Btw, das - macht durchaus Sinn, um ev. Profile Daten für den entsprechenden User zu laden ($PATH setzen ect). Ohne - übernimmst du einfach das Environment des aufrufenden Users, in diesem Fall root.

Hallo ads,

ich kritisiere hier nicht den Ansatz, ich habe auch kein Problem damit, auch nicht unter UNIX. Festzustellen ist aber, dass dieses Problem nicht nur hier im Forum immer wieder auftaucht. Dieses betrifft die Installtion unter Unix ebenso wie die Installation unter Windows. Dass der DB-Admin unbedingt “postgres” heißen muss, ist nicht vorgeschrieben. Er ist frei wählbar. Wenn dann in der englischen Dokumentation die Beschreibung für den Parameter -U vom Befehl createDb “User name to connect as” lautet, ist daraus nicht ersichtlich, das hier der Name des DB-Admins gemeint ist. Dieses gilt ebenso für die Bezeichnung “interner User” bei der Windows Installation. Selbst erfahren Sys- oder DB-Administratoren haben damit ihre Probleme.

Das Defizit ist eine eindeutige Bezeichnung bzw. die eindeutige Beschreibung. Eine Bezeichnung/Beschreibung wie z.B. “Name des DB-Admins” würde hier jeder sofort verstehen.



mfg

fristo

Ja cool,

nachdem ich den user in postgres gewechselt habe, der ja auch versteckt war konnte ich mit createuser mich selbst dazufügen.

Das is aber auch dumm beschrieben in dem Usermanual.
jetzt konnte ich endlich eine db erstellen.

Danke euch

MFG SubSonniC