pg_ctl -> command not found

hi,
ich bin gerade dabei, mir auf einem Ubuntu 6.06 Server Postgresql einzurichten. Das war auch bisher alles schön einfach, Aptitude nimmt einem ja alles ab…
nur möchte ich Postgresql auch gerne konfigurieren, und um da zusehen ob Veränderungen auch übernommen werden ists erforderlich den Postman mal neuzustarten.
dazu hat mir mein Handbuch und auch das Onlinehandbuch geraten pg_ctl zu benutzen.
wenn ich dies versuche, dann antwortet mir meine Bash folgendes:

-bash: pg_ctl: command not found

ich habe wenig Ahnung von Postgresql, da ich mich erst seit zwei Tagen damit beschäftige, und so sagt mir die Fehlermeldung nur, dass der Befehl scheinbar nicht auf meinem Rechner existiert…

kann mir da jemand weiterhelfen?

edit: ich hoffe der Beitrag ist im richtigen Subforum, war mir absolut nciht sicher

Hi,

Auch wenn Du wenig Ahnung von PostgreSQL hast, liegt es nicht an PostgreSQL.

Teile doch mal dem Betriebssystem mit, in welchen Verzeichnis es ausführbare Dateien suchen soll. Das Verzeichnis in dem die ausführbaren Dateien von PostgreSQL stehen, sollte auch dazu gehören. Du kannst aber auch direkt in das Verzeichnis gehen und von dort aus das Programm starten.



mfg

fristo

hmm, wie ich dem Betriebssystem mitteile in welchem Verzeichnis es ausführbare Dateien suchen soll weiss ich leider nicht…
bei meiner Suche nach den ausführbaren psql-Dateien bin ich auf folgendes gestoßen:
http://www.phpfi.com/144180
pg_ctl war leider nicht dabei :-/ (in /usr/sbin auch nicht…)
was mich stutzig macht, ist dass ich Postgres per Aptitude installiert habe aber sich scheinbar trotzdem ein Fehler eingeschlichen hat… schliesslich kann man da ja wenig falschmachen (abgesehen davon dass man sich die falschen Pakete aussuchen kann)

Was genau ist denn das für ein Betriebssystem?

wg. der “bash” vermute ich mal irgendein Unix-Derivat.

Wie mein Vorredner schon sagte, ist einfach die Datei “pg_ctl” nicht in deinem Suchpfad.

Du kannst die Datei auch direkt ausführen in dem du den kompletten Pfad angibst. “pg_ctl” müßte in dem Installierten PostgreSQL Verzeichis im Unterverzeichnis “/bin” sein.
Dann könntest du z.B.:

“/user/postgres/8.0/bin/pg_ctl …” ausführen.

Wenn du das Postgres-Verzeichnis nicht findest könntest du mal den find-Befehl ausprobieren

Unter Solaris z.B. mit:
find / -name pg_ctl -print

hey, vielen Dank.
pg_ctl befindet sich scheinbar in /usr/lib/postgresql/8.1/bin/pg_ctl

vielen dank für den Suchbefehl (bin was Linux betrifft ungefähr genauso fit wie mit Postgres… also garnicht :wink: )
Mein Betriebsystem is Ubuntu Linux 6.06 Dapper Drake…

ich konnte den Postmaster nun per

/usr/lib/postgresql/8.1/bin/pg_ctl stop -w -D /etc/postgresql/8.1/main/pgdata

stoppen, musste mich vorher allerdings als posgres einloggen, da ich sonst keinen Zugriff auf das Unterverzeichnis “pgdata” bekam.

dann versuchte ich mit dem gleichen Befehl (nur mit “start” statt “stop”) den Postmaster wieder zu starten, das ging nicht, da die postgresql.conf gesucht wurde, und die liegt ein Verzeichnis darunter.
also versuchte ich es mit

/usr/lib/postgresql/8.1/bin/pg_ctl start -w -D /etc/postgresql/8.1/main -o -i

das funktionierte nicht, ich hatte es als Benutzer postgres versucht. Laut Fehlermeldung ist postgres nciht der Besitzer des “mein” Verzeichnisses deshalb darf er da nix machen… ich habs danach als normaler Benutzer und auch als root versucht, Fehlermeldung die gleiche, Erfolg ebenfalls keiner.

root@bluebeat:/etc/postgresql/8.1# /usr/lib/postgresql/8.1/bin/pg_ctl start -w -D /etc/postgresql/8.1/main -o -i
pg_ctl: cannot be run as root
Please log in (using, e.g., “su”) as the (unprivileged) user that will
own the server process.

Besitzer des Verzeichnisses ist, wenn ich folgendes richtig interpretiere der root.

skank@bluebeat:/etc/postgresql/8.1$ ls -l
total 4
drwxr-xr-x 2 root root 4096 2006-08-22 17:58 main

Moin!

pg_ctl -D "/etc/postgresql/8.1/main/"

Müßte eigentlich den Postmaster starten. Bei Windows muß ich das Datenverzeichnis in Anführungszeichen angeben, weiß aber nicht ob es auch unter Linux so muß, wäre aber möglich. Mein Date Verzeichnis heißt auch “data”. Wenn in deinem main aber auch die Config-Dateien sind, müßte es richtig sein.

Und richtig. Aus Sicherheitsgründen (von PostgreSQL) darf der Benutzer “root” den Dienst nicht starten. Das muß ein einfacher “nicht-Administrator-Benutzer” sein. Wahrscheinlich “postgres”, wenn du diesen schon angelegt hast.

Und ja. Lt. deinem Post gehört “root” das Postgres-Verzeichnis. Er ist Eigentümer.

Solltest du beim starten des pg_ctl Probleme mit den Zugriffsrechten auf das Verzeichnis bekommen. Solltest du die Besitzerrechte ändern.

Unter Unix siehe “man chown” und “man chgrp”.

z.B.

su
cd /etc
chown -R postgres postgresql

mhh… laut meinem Vater ist das /etc/ Verzeichnis sozusagen Chefsache, da darf nur der root drinrumwerkeln… das beisst sich natürlich mit postgres, da postgres dem root nix erlaubt…

habe nun ne andere Distri (Debian) auffm Rechner, muss mich da erstmal einfinden, aber ich denke das Problem ist erstmal gegessen…

vielen Dank für eure Hilfe :slight_smile:
<3

Da hat dein Vater nicht ganz unrecht.

Ich hätte es auch direkt nach “/opt/sfw” installiert oder in andere öffentliche Ordner.

Aber ich vermute, die Zugriffsrechte werden genau das Problem sein.

jop, so wars… mein neues Debian hat mich während der Installation von Postgres gefragt wo es hin soll, und nun läuft alles wie geschmiert…
(Apache2 mit php4 und postgres, und alles verträgt sich/funktioniert miteinander)
nun muss ich nurnoch lernen mit php und postgres umzugehn :-/ (aber das is nu völlig OT)

Der Thread ist nicht gerade frisch (und scheinbar gelöst), ich will aber für andere, welche sich hierher verirren, noch ein paar Erkenntnisse niederschreiben:

unter Windows sind Pfade und Anführungszeichen schon etwas spezieller:

Pfad: ein '' (Backslash) muss doppelt geschrieben werden, also ‘\’

Text-Konstante:
unter Linux: Leerzeichen nur mit '\ ’ (Backslash gefolgt von Leer), also: ‘Text\ mit\ Leerzeichen’
unter Windows: Namen und Pfade mit Sonderzeichen, also auch Blank, müssen mit " (Doppel-Apostroph) geklammert werden
Beispiel: “C:\Pfad\zur Datei\Datei”

Ich glaube mich zu erinnern, daß ein Pfad unter Windows auch mit / (Slash) geschrieben werden kann, wenn er mit ’ (Einfach-Apostroph) geklammert wird.
das wäre dann ‘C:/Pfad/zur Datei/Datei’

Außerdem kann ich zwar eine Datenbank ‘Test’ anlegen, aber nicht auf sie zugreifen. Das muß als ‘test’ geschrieben werden. Ich habe dies erst vor kurzem unter Win XP im Konsole-Fenster erlebt!
Es wohl unnötig zu sagen, daß ansonsten die Schreibweise der Kommandos und Dateinamen unter Windows egal ist.

das kann, im Normalfall, nur jemand mit root-Rechten, was aber kein Problem sein sollte, da nur die Dateien von/für PostgreSQL betroffen sind.

Will man - aus was für Gründen auch immer - das System neu aufsetzen, muß daß Verzeichnis ‘data’ komplett gelöscht werden! Ein umkopieren irgendwo hin funktioniert nicht! Jedenfalls in Bezug auf die Inhalte. Also ist vorher ein pg_dump angesagt!

Unter *nix siehe “man chown” und “man chgrp”

Wechsel ins Arbeits-Verzeichnis PostgreSQL,

  • Daten, bei mir ‘/var/lib/pgsql/’

z.B.

su]also nur geringfügige Änderungen. 
Der Parameter 'c' bewirkt ein Echo für jede Änderung; der Parameter '*' wirkt auf alle Dateien und Pfade, die [u]nicht[/u] mit '.' (Punkt) beginnen

Die Ausführung der Datenbank-Initialisierung muß natürlich auch als user 'postgres' vorgenommen werden