PostgreSQL startet nicht

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

Betriebsystem: OS X (10.9.1 Mavericks)
PostgreSQL: PostgreSQL 9.3.1-1 [9.2 MiB] von http://www.kyngchaos.com/software/postgres

philipps-mbp:local philippmeier$ pwd
/usr/local
philipps-mbp:local philippmeier$ ls
pgsql pgsql-9.3
philipps-mbp:local philippmeier$ $ psql
-bash: $: command not found
philipps-mbp:local philippmeier$

pgsql und pgsql-9.3 sind vermutlich 2 Verzeichnisse, psql selbst liegt irgendwo drunter in bin/ oder so und Du hast keinen Pfad drauf.

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.

Gruß Uwe

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 :frowning: , obwohl dort ein ‘psql’ liegt (siehe unten). Hm, was kann ich weiter tun? Beste Grüsse Phil

An Uwe: Ich habe das PostgreSQL 9.3.1-1.dmg von http://www.kyngchaos.com/software/postgres auf meinem Mac installiert und nichts weiter gemacht.

philipps-mbp:bin philippmeier$ pwd
/usr/local/pgsql/bin
philipps-mbp:bin philippmeier$ ls
clusterdb ecpg pg_dumpall pg_xlogdump shp2pgsql
createdb initdb pg_isready pgsql2shp vacuumdb
createlang pg_basebackup pg_receivexlog postgres vacuumlo
createuser pg_config pg_resetxlog postmaster
dropdb pg_controldata pg_restore psql
droplang pg_ctl pg_standby raster2pgsql
dropuser pg_dump pg_upgrade reindexdb
philipps-mbp:bin philippmeier$ $ psql
-bash: $: command not found
philipps-mbp:bin philippmeier$ cd psql
-bash: cd: psql: Not a directory
philipps-mbp:bin philippmeier$

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 :frowning:
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

User postgres (!), nicht _postgres, muß Owner vom datadir sein.

/usr und /usr/local sollten für others zugreifbar sein, also r und x.

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.

Gruß Uwe

… 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 :frowning:

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 503 wheel 5317456 9 Nov 03:13 postgres
lrwxr-xr-x 1 root admin 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

ps -faux | grep postgres

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.

Gruß Uwe

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:

UID PID PPID C STIME TTY TIME CMD
216 77 1 0 10:53am ?? 0:00.77 /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
216 109 77 0 10:53am ?? 0:00.00 postgres: logger process
216 111 77 0 10:53am ?? 0:00.01 postgres: checkpointer process
216 112 77 0 10:53am ?? 0:00.35 postgres: writer process
216 113 77 0 10:53am ?? 0:00.30 postgres: wal writer process
216 114 77 0 10:53am ?? 0:00.90 postgres: autovacuum launcher process
216 115 77 0 10:53am ?? 0:02.70 postgres: stats collector process

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

Was willst Du denn noch, läuft doch! :wink:

… 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’ ;

Danke für die Erinnerung Client <-> Server!

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


sh-3.2# pwd
/dev/fd
sh-3.2# ls -l
total 0
crw–w---- 1 philippmeier tty 16, 0 20 Mär 14:35 0
crw–w---- 1 philippmeier tty 16, 0 20 Mär 14:35 1
crw–w---- 1 philippmeier tty 16, 0 20 Mär 14:35 2
dr–r--r-- 1 root wheel 0 20 Mär 11:20 3
dr–r--r-- 1 root wheel 0 20 Mär 11:20 4
dr–r--r-- 1 root wheel 0 20 Mär 11:20 5
sh-3.2#


2. Versuch liefert:
sh-3.2# find / -name .s.PGSQL.5432
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
sh-3.2#

sh-3.2# pwd
/dev/fd
sh-3.2# ls -l
total 0
crw–w---- 1 philippmeier tty 16, 0 20 Mär 14:35 0
crw–w---- 1 philippmeier tty 16, 0 20 Mär 14:35 1
crw–w---- 1 philippmeier tty 16, 0 20 Mär 14:35 2
dr–r--r-- 1 root wheel 0 20 Mär 11:20 3
dr–r--r-- 1 root wheel 0 20 Mär 11:20 4
dr–r--r-- 1 root wheel 0 20 Mär 11:20 5
sh-3.2#

  1. find / -name .s.PGSQL.5432 (du suchst ja nicht /tmp)
  2. lief PG zu diesem Zeitpunkt?
  3. die Shell kann keine SQL-Befehle. Dazu brauchst bei laufender DB eine Client-Connection zur DB und da fragst das dann ab. Hint: die DB KANN SQL :wink:

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.