Hi, habe erfolglos meine ersten Schritte mit PostgreSQL versuchen wollen. Leider scheitere ich schon ganz am Anfang. Ich bringe PostgreSQL nicht zum Starten. Folgende Meldung erscheint: ‘command not found’. Obwohl PostgreSQL unter /usr/local abgelegt ist (siehe unten). Wie muss ich vorgehen, um PostgreSQL starten zu können? Bin über jeden Tipp sehr dankbar und vielen Dank im Voraus! Beste Grüsse Phil
Hast du das selbst kompiliert oder warum ist das unter local? Dann ist psql in /usr/local/pgsql/bin was nicht im Pfad steht. Du kannst also entweder den Pfad ergänzen oder ein Symlink auf psql in /usr/local/bin setzen.
Merci vielmals für die Antworten. Leider komme ich nicht weiter. Auch wenn ich ins bin-Verzeichnis gehe und dort ‘$ psql’ eingebe startet PostgreSQL nicht , obwohl dort ein ‘psql’ liegt (siehe unten). Hm, was kann ich weiter tun? Beste Grüsse Phil
psql ist der SQL client für Postgres, damit wird Postgres nicht gestartet.
Starten kann man den Server über den Befehl pg_ctl oder postgres:
Deine Shell scheint ausserdem so eingestellt zu sein, dass das aktuelle Verzeichnis nicht im Suchpfad ist. Falls Postgres schon läuft dann starte den psql doch mal mit ./psql (wenn Du im bin Verzeichnis bist)
Merci für die fundamentalen Hinweise! Leider bin ich immer noch nicht ganz am Ziel
Postgres kann bei der Ausführung von ‘./postgres -D /usr/local/pgsql/data’ nicht auf die Serverkonfigurationsdatei zugreifen (siehe unten).
Die Rechte für ‘data’ sind folgende: ‘drwx------ 21 _postgres _postgres 714 16 Mär 13:47 data’.
Muss ich für ‘data’ wirklich die Rechte ändern? Ist dies auch für ‘var’ notwendig? Muss ich also für ‘data’ und ‘var’ die Rechte wie z. B. bei ‘share’ auf ‘drwxr-xr-x’ setzen? Und wie mache ich dies am besten?
Beste Grüsse
Phil
philipps-mbp:bin philippmeier$ ./postgres -D /usr/local/pgsql/data postgres kann nicht auf die Serverkonfigurationsdatei „/usr/local/pgsql/data/postgresql.conf“ zugreifen: Permission denied
philipps-mbp:bin philippmeier$ cd …
philipps-mbp:pgsql philippmeier$ ls
bin data include lib share var
philipps-mbp:pgsql philippmeier$ ls -l
total 0
drwxr-xr-x 33 503 wheel 1122 8 Mär 18:34 bin drwx------ 21 _postgres _postgres 714 16 Mär 13:47 data
drwxr-xr-x 29 503 wheel 986 8 Mär 18:34 include
drwxr-xr-x 84 503 wheel 2856 9 Mär 00:44 lib
drwxr-xr-x 22 503 wheel 748 8 Mär 18:34 share
drwxr-x— 10 _postgres admin 340 16 Mär 13:47 var
Als Ergänzung zu akretschmer: Das datadir muß dem Benutzer gehören unter dem der Datenbankserver läuft. Der muss nicht zwingend postgres heisen, k.A. wie das auf dem Mac geregelt ist.
… merci; leider führt eins zum andern: Ich habe versucht, die Rechte beim data-Dir neu zu setzen und den owner zu ändern. Beides ist missglückt (siehe nachfolgend). Daher habe ich weiter versucht mittels sudo als _postgres-User die Rechte zu setzen; was auch nicht funktioniert hat
philipps-mbp:pgsql philippmeier$ chmod g=rwx,o=rwx data; chmod: Unable to change file mode on data: Operation not permitted
philipps-mbp:pgsql philippmeier$ chown -R postgres data chown: postgres: illegal user name
philipps-mbp:pgsql philippmeier$ sudo su _postgres
philipps-mbp:pgsql philippmeier$ chmod g=rwx data chmod: Unable to change file mode on data: Operation not permitted
Wie finde ich denn raus unter welchem Benutzer der Datenbankserver läuft? Ist postgres oder postmaster unter /usr/local/pgsql/bin/ der eigentliche Datenbankserver (User: 503 oder root)?
/usr/local/pgsql/bin
-rwxr-xr-x 1 503wheel 5317456 9 Nov 03:13 postgres
lrwxr-xr-x 1 rootadmin 8 8 Mär 16:45 postmaster -> postgres
Dessen ungeachtet, lassen sich aber wie oben beschrieben die Rechte und Owner nicht ändern? Was könnte ich denn noch machen? Danke für jeden Hinweis im Voraus. Beste Grüsse Phil
zeigt dir die laufenden Prozesse (in denen der String postgres vorkommt) und ihre Daten. Der Nutzer unter dem etwas läuft ist nicht unbedingt der Besitzer der Datei. Und für chmod oder chown braucht du vermutlich root-Rechte oder die Rechte des Besitzers.
Merci, bin ein wenig weiter aber noch nicht ganz am Ziel:
Zum Ändern der Dateirechte von data-Dir und var-Dir habe ich mir zuerst Rootrechte mittels ‘sudo su root’ (su root hat nicht funktioniert) besorgen müssen.
Danach habe ich die Dateirechte der beiden Dir’s data und var mittels ‘chmod g=rwx,o=rwx data/var’ neu gesetzt.
Weiter habe ich die Dateirechte für postgresql.conf und postmaster.opts im data-Dir auf ‘-rw-r-xr-x’ gesetzt.
Das Starten von PostgreSQL im Verzeichnis ‘/usr/local/pgsql/bin’ mittels ‘./postgres -D /usr/local/pgsql/data’ führt zu folgender Meldung:
philipps-mbp:bin philippmeier$ ./postgres -D /usr/local/pgsql/data
2014-03-19 18:31:50 CETFATAL: data directory “/usr/local/pgsql/data” has wrong ownership
2014-03-19 18:31:50 CETHINT: The server must be started by the user that owns the data directory.
Also der Eigentümer des data-Dir wird mit ‚ls –l’ als ‚_postgres’ ausgewiesen. Also habe ich versucht mich als ‚_postgres’-User anzumelden und dann PostgeSQL nochmals zu starten; aber das will auch nicht funktionieren? Also der Wechsel als _postges-User klappt nicht, oder wo liegt hier nun das Problem, dass dieselbe Fehlermeldung erscheint (siehe unten)? Oder wie Du Uwe schriebst “Der Nutzer unter dem etwas läuft ist nicht unbedingt der Besitzer der Datei”. Aber wie kriege ich nun den Nutzer des data-Dir raus, wenn dieser nicht _postgres sein soll? Mittels dem vorgeschlagenen ‘ps -faux | grep postgres’ und ‘ps -faux | grep _postgres’? Als Resultat erscheint beide Male 'ps: No user named ‘x’ '. Also hab ich’s mit ‘philipps-mbp:pgsql philippmeier$ ps -f -U _postgres’ versucht mit folgendem Resultat:
Versuch PosgreSQL zu starten als User ‘_postgres’:
philipps-mbp:pgsql philippmeier$ su _postgres
Password:
su: Sorry
philipps-mbp:pgsql philippmeier$ sudo su _postgres
Password:
philipps-mbp:pgsql philippmeier$ pwd
/usr/local/pgsql
philipps-mbp:pgsql philippmeier$ ls
bin data include lib share var
philipps-mbp:pgsql philippmeier$ cd bin
philipps-mbp:bin philippmeier$ ls
clusterdb dropdb initdb pg_ctl pg_receivexlog pg_upgrade postmaster shp2pgsql
createdb droplang pg_basebackup pg_dump pg_resetxlog pg_xlogdump psql vacuumdb
createlang dropuser pg_config pg_dumpall pg_restore pgsql2shp raster2pgsql vacuumlo
createuser ecpg pg_controldata pg_isready pg_standby postgres reindexdb
philipps-mbp:bin philippmeier$ ./postgres -D /usr/local/pgsql/data
2014-03-19 18:44:52 CETFATAL: data directory “/usr/local/pgsql/data” has wrong ownership
2014-03-19 18:44:52 CETHINT: The server must be started by the user that owns the data directory.
philipps-mbp:bin philippmeier$
Versuch PosgreSQL zu starten als User ‘postgres’:
philipps-mbp:bin philippmeier$ sudo su postgres
su: unknown login: postgres
philipps-mbp:bin philippmeier$
Also hat jemand noch eine Idee? Beste Dank im Voraus! Grüsse Phil
… Mensch, ja klar, wenn unter ‘ps -f -U _postgres’ was steht, dann läuft PostgreSQL ja auch! Leider war dies ein kurzer Erfolg und beruhte auf pgAdmin3.
Nachdem über die Shell PostgreSQL nicht startete habe ich versucht PostgreSQL mit dem Tool pgAdmin3 zu starten, was mir offenbar gelungen ist, so dass die Abfrage ‘ps -f -U _postgres’ auf der Shell natürlich das Laufen von PostgreSQL bestätigte (aber gestartet wurde PostgreSQL über pgAdmin3).
Jetzt läuft aber gar nix mehr weder über pgAdmin3 noch über die Shell, obwohl ich für pgAdmin3 auch das richtige Passwort eingegeben habe, was ich über find .pgpass und cat .pgpass kontrolliert habe (siehe am Ende). Offenbar habe ich jetzt alles verschlimmbessert? Das Ziel ist vorerst PostgreSQL über die Shell zum Laufen zu bringen (werde von pgAdmin3 jetzt mal die Finger lassen). Da tut sich aber nach wie vor nix!? Für jeden Hinweis besten Dank im Voraus! Grüsse Phil
PostgreSQL starten über SHELL:
philipps-mbp:bin philippmeier$ sudo su _postgres
Password:
philipps-mbp:bin philippmeier$ ./postgres -D /usr/local/pgsql/data
2014-03-19 20:41:27 CETFATAL: data directory “/usr/local/pgsql/data” has wrong ownership
2014-03-19 20:41:27 CETHINT: The server must be started by the user that owns the data directory.
philipps-mbp:bin philippmeier$ ps -f -U _postgres
UID PID PPID C STIME TTY TIME CMD
philipps-mbp:bin philippmeier$
PostgreSQL starten über pgAdmin3:
kommt nun nach der Eingabe des Passwortes folgende Meldung:
"Ein Fehler ist aufgetreten: Error connecting to the server: could not connect to sever: No such file or directory. Is the server running locally and accepting connections on Unix domain socket “/tmp/.s.PGSQL.5432?”
Last login: Wed Mar 19 20:05:24 on ttys000
philipps-mbp:~ philippmeier$ find .pgpass
.pgpass
philipps-mbp:~ philippmeier$ cat .pgpass
:5432:*:postgres:MEINPASSWORT
Unterscheide bitte zwischen dem eigentlichen Server (PostgreSQL) und dem Client(psql, PGAdmin, PhpPgAdmin, whatever).
Damit sich ein Client mit dem Server verbinden kann gibt es 2 Wege (unter *NIX, unter Kleinweich nur den ersteren):
TCP/IP
UNIX-Domain-Socket
Dein PGAdmin versucht es über Socket und sucht diesen in /tmp, möglicherweisle legt PostgreSQL den woanders ab. Du kannst in der postgresql.conf mittel unix_socket_directories festlegen, wo er sein soll, bzw. bei einem laufenden System abfragen, wo das ist:
select setting from pg_settings where name = ‘unix_socket_directories’ ;
Folgende Fehlschläge beim Suchen der Socket-Datei:
1 Versuch: sh-3.2# find / -name tmp -->Anzeige der tmp-dirs
nirgends eine ‘.s.PGSQL.5432’-Datei (siehe unten, in zwei Verzeichnisse ‘Application Support’ komme ich nicht rein, da auseinander geschrieben).
2 Versuch: sh-3.2# find / -name .s.PGSQL.5432 -->Anzeige der Socket-Datei (siehe unten)
keine Socket-Datei gefunden
3 Versuch: sh-3.2# select setting from pg_settings where name = ‘unix_socket_directories’;
sh: syntax error near unexpected token `from’
Was kann ich noch unternehmen (was mache ich falsch) um rauszukriegen, welches das Unix-Socket-Verzeichnis ist? Merci im Voraus. Grüsse Phil
\
1 Versuch liefert:
sh-3.2# find / -name tmp
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/private/tmp
launch-dG8yMv launch-xcXIYb launchd-145.vF5IfZ launchd-380.5kHxMR
/private/var/at/tmp
leer
/private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/C/PKInstallSandboxManager/179846A2-081F-4464-8F74-E8625951EA40.sandbox/tmp
leer
/private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/C/PKInstallSandboxManager/73E33420-47E5-42F4-AC65-DE62FC0313F1.sandbox/tmp
leer
/private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/C/PKInstallSandboxManager/CEE2D20E-6D30-452C-8D63-DCA45822D887.sandbox/tmp
leer
/private/var/spool/cups/tmp
leer
/private/var/tmp
configd-pattern.plist configd-session.plist configd-store.plist launchd
configd-reachability configd-state filesystemui.socket systemstats
/tmp
launch-dG8yMv launch-xcXIYb launchd-145.vF5IfZ launchd-380.5kHxMR
/Users/philippmeier/Library/Application Support/OpenOffice/4/user/extensions/tmp
Verweigert Wechsel, da Application Suppoert nicht zusammengeschrieben
/Users/philippmeier/Library/Application Support/Oracle/Java/Deployment/tmp
Verweigert Wechsel, da Application Suppoert nicht zusammengeschrieben
merci und kurz eine Rückmeldung zu oben:
Nein, PG lief nicht, bei keinem der Versuche (sh-3.2# find / -name tmp, sh-3.2# find / -name .s.PGSQL.5432 -->siehe vorderen Beitrag am Ende)
Den SQL-Befehl 'select setting from pg_settings where name = ‘unix_socket_directories’ auf der Shell auszuführen ist ein Fauxpas, sorry!
Daher versuche ich jetzt zuerst den PG-Server zu starten aber komme nicht weiter wegen dem alten “Problem” (vorher hat PG-Server das Starten als root verweigert, daher als philippmeier, _postgres versucht–>siehe unten):
bash-3.2$ ./postgres -D /usr/local/pgsql/data
2014-03-21 11:39:00 CETFATAL: data directory “/usr/local/pgsql/data” has wrong ownership
2014-03-21 11:39:00 CETHINT: The server must be started by the user that owns the data directory.
Aber wie kriege ich raus, wer die ‘ownership’ von ‘/usr/local/pgsql/data’ hat, wenn dies nicht _postgres ist?
sh-3.2# ls -l
drwxrwxrwx 20 _postgres _postgres 680 17 Mär 23:09 data
Grüsse und besten Dank für Hinweise im Voraus! Phil
PG-Server als root starten philipps-mbp:~ philippmeier$ sudo su root
Password:
sh-3.2# cd bin
sh-3.2# ./postgres -D /usr/local/pgsql/data
Der PostgreSQL-Server darf nicht als „root“ ausgeführt werden. Der
Server muss unter einer unprivilegierten Benutzer-ID gestartet werden,
um mögliche Sicherheitskompromittierung zu verhindern. In der
Dokumentation finden Sie weitere Informationen darüber, wie der
Server richtig gestartet wird.
PG-Server als philippmeier starten sh-3.2# sudo su philippmeier
bash-3.2$ ./postgres -D /usr/local/pgsql/data
2014-03-21 11:37:23 CETFATAL: data directory “/usr/local/pgsql/data” has wrong ownership
2014-03-21 11:37:23 CETHINT: The server must be started by the user that owns the data directory.
bash-3.2$ cd …
bash-3.2$ ls
bin data include lib share var
bash-3.2$ ls -l
drwxrwxrwx 20 _postgres _postgres 680 17 Mär 23:09 data
PG-Server als _postges starten bash-3.2$ sudo su _postgres
bash-3.2$ cd bin
bash-3.2$ ./postgres -D /usr/local/pgsql/data
2014-03-21 11:39:00 CETFATAL: data directory “/usr/local/pgsql/data” has wrong ownership
2014-03-21 11:39:00 CETHINT: The server must be started by the user that owns the data directory.