Tutorial PostgreSQL unter Mac OS X installieren

moses_78

moses_78

Aktives Mitglied
Thread Starter
Dabei seit
08.04.2005
Beiträge
1.288
Reaktionspunkte
22
PostgreSQL unter Unix/Mac OS X kompilieren und Installieren

Ich habe wohl zu viel Zeit...daher eine weiteres kleines Tutorial :cool:

Hier eine weitere Anleitung, diesmal, um das beliebte DBMS "PostgreSQL" zu
installieren. Im Grunde läuft alles ähnlich wie bei MySQL ab, es gibt jedoch ein
paar Unterschiede, welche zu beachten sind, wie zb. die anders geregelte
Benutzerverwaltung.

Hinweis: Eine Raute(#> ) vor den Befehlen bedeutet, dass man root-Rechte
benötigt, um sie auszuführen. Ein Dollarzeichen bedeutet, dass die Rechte ei-
nes gewöhnlichen Benutzers ausreichen. Root-Rechte erlangt man mit "sudo
<Befehl>" oder "su root".

Warum PostgreSQL?

PostgreSQL ist, im Vergleich zu MySQL, die "große" Lösung. MySQL ist für
kleinere Aufgaben vollkommen ausreichend, hat jedoch auch schwächen,
was große Datenbestände betrifft. Eine Datensatz bei PostgreSQL zb. kann
bis zu 1,6 Terabyte groß sein, bei MySQL (Typ MyISAM) sind es "nur" 64 Kb.
Desweiteren verfügte PostgreSQL schon früh über praktische Features wie
Stored Procedures und Trigger, zweiteres beispielsweise war schon in Ver-
sion 6.2.1 (1997 erschienen) verfügbar, während MySQL es erst seit Version
5.0.2 (Ende 2004) hat.

Kompilierung

Auch diese Software soll aus dem Programme-Verzeichnis installiert werden:
Code:
$> cd /Applications
Dann müssen die Sourcen des aktuellsten (Stand 13.4.), stabilen Relaeses gesaugt werden:
Code:
$> curl -O http://ftp.de.postgresql.org/mirror/postgresql//source/v8.2.3/postgresql-8.2.3.tar.gz
Das heruntergeladen, gzip-komprimierte tar-Archiv wird mit
Code:
$> tar xzvf postgresql-8.2.3.tar.gz
dekomprimiert, und in das entstehende Verzeichnis gewechselt:
Code:
$> cd postgresql-8.2.3
Nun wieder der bereits bekannte Dreisprung aus "configure", "make" und "make install":
Code:
$> ./configure --prefix=/usr/local/postgresql-8.2.3
$> make
#> make install
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: birnenjoe, HeckMeck, Prof Farnsworth und 3 andere
Konfiguration

PostgreSQL benötigt wie MySQL einen eigenen User names "postgres", den
wir nun im Controlpanel "Benutzer" einrichten. Das Passwort ist in diesem
Fall allerdings wichtiger als bei MySQL, da es auch zur Identifizierung an dem
PostgreSQL-Server verwendet wird. Darin liegt vielleicht der größte Unter-
schied in der Anwendung im Vergleich zu MySQL, wo der User "mysql" nur
dazu dient, den MySQL-Server nicht mit root-Rechten laufen zu lassen.

Da die Bibliotheken und Binaries nach /usr/local/postgresql-8.1.3 kopiert
wurden, soll uns nun ein symbolischer Link ein wenig Tipparbeit ersparen:
Code:
#> ln -s /usr/local/postgresql-8.2.3 /usr/local/pgsql
Dieser Link erleichtert es auch, wenn man PgSQL updaten möchte; In die-
sem Fall würde als Prefix dann eben ein anderer Installationspfad ange-
geben und eine neue Verknüpfung von /usr/local/pgsql zum Installations-
pfad erstellt; damit würden dann alle absoluten Pfade weiterhin stimmen.

Das Verzeichnis "var" soll später die Datenbanken selbst, das Log- und das
PID-File enthalten: ´
Code:
#> mkdir /usr/local/pgsql/var

Das Verzeichnis wird nun User postgres zugewiesen, damit andere System-
benutzer nicht auf den Ordner mit den Datenbanken zugreifen können:
Code:
#> chown postgres /usr/local/pgsql/var
PostgreSQL sollte nun startbereit sein.

Inbetriebnahme

Hier noch etwas zur Benutzerverwaltung von PgSQL: Um den PostgreSQL-
Daemon zu starten oder den Query-Browser zu verwenden, *muss* man
als User "postgres" angemeldet sein. Beim Versuch, als Root, oder einen
anderen Benutzer den Query-Browser, oder pg_ctl zu verwenden, bekommt
man eine Fehlermeldung, und das Programm bricht ab.

Daher wechseln wir mit
Code:
$> su postgres
zu User "postgres". Außerdem muss noch der Ordner mit den Programmen
wie pg_ctl in die PATH-Variable aufgenommen werden, damit man nicht
immer den absoluten Pfad zu der Anwendung, sondern nur ihren Namen
angeben muss:
Code:
postgres> echo "PATH=\$PATH:/usr/local/pgsql/bin" >> $HOME/.bash_profile
postgres> export PATH=$PATH:/usr/local/pgsql/bin

Das Programm "initdb" erstellt die benötigten Datenbanken:
Code:
postgres> initdb -D /usr/local/pgsql/var
Jetzt kann der PostgreSQL-Daemon gestartet werden. Mit "D"-Flag wird der
Ordner angegeben, indem Datenbanken und PID-File gespeichert werden
sollen, "l" steht für das zu verwendende Logfile:
Code:
postgres> pg_ctl -D /usr/local/pgsql/var start -l /usr/local/pgsql/var/pgsql.log
Das Output sollte so aussehen:
postmaster starting

Ist das nicht der Fall, lohnt sich ein Blick ins Logfile (cat /usr/local/pgsql/
var/pgsql.log) und/oder eine PN an mich....

Jetzt noch eine erste Datenbank erstellen:
Code:
postgres> createdb pg_test
"psql" ist der Query-Browser unter PostgreSQL. Jetzt kann man mit
Code:
postgres> psql pg_test
ein paar Queries ausprobieren. Das Programm kann mit \q jederzeit wieder
beendet werden.

@Badener: Ich weiss, die Installationspakete haben bei mir jedoch alle nicht
funktioniert....
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: birnenjoe und heinzheise
Bei mir auch nicht - aber auf der Seite gibt es auch ein Tutorial, was man ins Terminal tickern muß :D:D Siehe Link!

Egal: Dein Tutorial ist auf jeden Fall besser erklärt - Glückwunsch dazu und danke für die viele Arbeit!
 
Feinschliff

Damit der PgSQL-Daemon selbstständig startet, und beim Herunterfahren
des Systems ordnungsgemäß beendet wird, muss ein sog. StartupItem in-
stalliert werden.

Zuerst muss das Verzeichnis "postgresql" in /Library/StartupItems erstellt
werden:
Code:
#> mkdir /Library/StartupItems/postgresql
In diesen Ordner kommen nun die Dateien "postgresql" und "StartupParameters.plist".
Wir erstellen sie mit dem Editor "pico":
Code:
#> pico /Library/StartupItems/postgresql/StartupParameters.plist
Die Datei soll folgenden Inhalt bekommen:
Code:
{
  Description   = "PostgreSQL 8.1.3 database server";
  Provides      = ("PostgreSQL");
  Requires      = ("Resolver");
}
Den Text kann man <ctrl> + o, <enter>, <ctrl> + x speichern, und den
Editor verlassen.

Das Gleiche muss noch mit dem eigentlichen Script passieren:
Code:
#> pico /Library/StartupItems/postgresql/postgresql
Der Inhalt:
Code:
#!/bin/sh

if [ -z $1 ] ; then
		echo "Usage: $0 {start|stop|restart}"
		exit 1
fi

. /etc/rc.common
		
StartService()
{
		ConsoleMessage "Starting PostgreSQL..."
		su postgres -c '/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/var -l /usr/local/pgsql/var/pgsql.log'		
}

StopService()
{
		ConsoleMessage "Shutting down PostgreSQL..."
		su postgres -c '/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/var'
}

RestartService()
{
		StopService
		StartService
}


RunService "$1"
Auch hier wird der Text mit <ctrl> + o, <enter>, <ctrl> + x gespeichert,
und der Editor verlassen.

Jetzt müssen eigentlich nur noch die Zugriffsrechte für Verzeichnis und Script
gesetzt werden:
Code:
#> chown -R root /Library/StartupItems/postgresql
#> chgrp -R wheel /Library/StartupItems/postgresql
#> chmod -R 755 /Library/StartupItems/postgresql
#> chmod a-x /Library/StartupItems/postgresql/StartupParameters.plist

Tja, dass müsste es eigentlich gewesen sein ;)

Weiterführendes

http://www.postgresql.org/docs/ - PgSQL-Dokumentation

http://www.postgres.de - Offizielle Deutsche Seite von PostgreSQL

http://aliacta.com/products/eduphant.htm - Ein PostgreSQL-Client
für Mac OS X

http://phppgadmin.sourceforge.net/ - PHP-basierendes Clientprogramm
(Hinweis: Damit man mit PHP auf den PostgreSQL-Server funktioniert,
muss PHP mit dem Flag --with-pgsql kompiliert sein. Dies ist zb. bei den
Paketen von entropy.ch der Fall)

http://www.phpfreaks.com/tutorials/60/1.php - Tutorial für die Nutzung
von PostgreSQL mit PHP (englisch)

http://us3.php.net/manual/de/ref.pgsql.php - Auszug aus der PHP-Doku
mit allen PgSQL-Funktionen, in den Kommentaren (ganz unten) sind mehrere
praktische Beispiele aufgelistet.

Ansonsten wäre ich sehr dankbar, wenn einige von den DB-Gurus hier aus
dem Forum mal drüberschauen könnten, und mich per PN auf eventuelle
Fehler hinweisen könnten.

@Badener: Danke :)
 
  • Gefällt mir
Reaktionen: birnenjoe, cyko, heinzheise und eine weitere Person
Source saugen

Betrifft: Kompilierung
Abbruchmeldung "curl : (23) failed writing body",
reicht es einen anderen mirror zu versuchen ?
 
beizeiten gibt es sehr aktuelle Binaries für Mac OS, die sogar das Startobjekt gleich mit erzeugen. So z.B. bei www.entropy.ch . Da lohnt sich das selbst kompilieren nur noch in Spezialfällen!
 
Bei mir klappt das Laden des Datenbank-Servers nach einem Neustart nicht. Ich muss jedes Mal
Code:
pg_ctl -D /usr/local/pgsql/var start -l /usr/local/pgsql/var/pgsql.log

ins Terminal tippen, damit der Server startet. Woran kann es liegen? Sonst klappt alles prima mit dem Server, ich verwende Version 8.2.4.

Danke für eine Antwort.

Gruß,
Heinz
 
Hallo,

wie kann ich die Datenbank wieder Deinstallieren?
 
Wird die DB ordnungsgemäß beendet wenn ich mein Mac Herunterfahre?

das sollte pragmatisch gesehen klappen, da dabei auch der postgres-Prozess beendet und die DB damit geschlossen wird. 100%ig ist das aber nicht. Besser wäre:

Ich habe sie nicht in StartUpItems kopiert.

oder der Launch-Daemon dazu!


entropy.ch verfügt über ein ordentliches Forum zu seinen Produkten. Da DBMS wie postgres an verschiedenen Orten Dateien ablegen können ( und das eben je nach Quelle woanders sein kann), würd ich zur Deinstallation entweder in die README schauen oder dort im Forum fragen.
 
Hallo,

wie kann ich die Datenbank wieder Deinstallieren?

Ich habe postgreSQL-8.2.5 unter "/usr/local/pgsql" installiert... Leider habe ich bei der Installation Fehler gemacht und somit möchte ich das ganze wieder deinstallieren.
Muss ich nur die Dateien lösche? Wenn ja, wie?
Oder geht das Ganze irgendwie anderes?

PS: Eigentlich bräuchte ich ja nur einen Server denn ich hin und wieder für Programmierzwecke starten kann. Gibt es da eventuell eine benutzerfreundliche Lösung?

Danke für eure Antworten...
 
wie sollen wir wissen wo Du Daten hinkopiert hast?

Wenn auch die Ds in /usr/local/pgsql liegen sollte es in der Tat reichen den Ordner zu entfernen! Nimm einfach den Ordner und wirf ihn in den Papierkrob ( bei gestopptem pgadmin) oder verwende rm im Terminal.

Mysql bietet Klickibunti-Tools für Leute die die Shell nicht mögen, ich glaube aber auch für postgres gibt es sowas.
 
wie sollen wir wissen wo Du Daten hinkopiert hast?

Wollte nur sagen, dass ich alles unter /usr/local liegen habe... und wenn ich das mit rm im terminal lösche musste postgresql weg sein. oder?
 
Etwas einfacher geht es beizeiten da Postgres selbst einen One-Click-Installer für Mac OS X zur Verfügung stellt. Hier etwa für die aktuelle Version 8.3.3:

http://www.postgresql.org/download/macosx

Die Version soll neben Postgren auch den pgAdmin zur grafischen Administration enthalten!
 
Hallo,

ich habe eine Frage. Ich habe Postgres installiert und ein Datenbankschema dort erstellt.

Nun will ich Testweise SQL Funktionen wie DROP table ausprobieren und habe dafür den Automatischen Rollback aktiviert, sodass die Abfrage nicht wirklich ausgeführt wird.
Allerdings wird die Tabelle trotzdem gelöscht.

Kennt sich hier jemand mit postgres aus?
 
Zurück
Oben Unten