PostgreSQL auf Mac OS X

Mein Fetisch für PostgreSQL dürfte nun kein Geheimnis mehr sein. Und auch die Installation von PostgreSQL auf Mac OS X ist dank der Pakete von Marc Liyanage sowie der Anleitung von Key Value Coding auch relativ einfach. Doch ich wollte eine noch einfachere Installation. Das Ergebnis war dieses Paket von PostgreSQL 8.1.2 (6,15MB). (Es ist inzwischen veraltet und nicht wirklich ausgiebig getestet. Bitte nicht benutzen. Es ist nur aus nostalgischen Gründen noch hier)

Das in diesem Paket enthaltene PostgreSQL habe ich größtenteils nach der Anleitung von KeyValueCoding gebaut. Der Unterschied ist liegt im Layout der Dateien im Paket sowie den Skripten, die einige Nacharbeit übernehmen, um PostgreSQL in einem lauffähigen Zustand zu hinterlassen.

Der erste Unterschied durfte wohl der Pfad zur Datenbank selbst sein. Ich habe mich entschieden, die Datenbank unter /Users/Shared/PostgreSQL abzulegen. Die Logs liegen in einem von Unix gewohnten Pfad (/var/log/pgsql). Die Skripte im Paket legen die nötigen Benutzer und Gruppen an, initialisieren eine leere Datenbank und verlinken die Man-Pages sowie die Binaries nach /usr/local, damit man seinen PATH nicht unnötig verbiegen muß. Ich habe mir Mühe gegeben, bei der Installation bereits vorhandene Datenbanken, Benutzer, Gruppen nicht anzufassen. Für Verbesserungsvorschläge bin ich dankbar.

Die Skripte aus dem Paket gibt es auch einzeln:

Das Paket habe ich bei mir getestet und es funktioniert. Sollte es trotzdem vorkommen, daß es Amok läuft, die Festplatte löscht, die Freundin schwängert und die Katze vergewaltigt, so übernehme ich keine Verantwortung.

Update: Das Paket ist nur für PPC kompiliert. (Vielleicht mache ich irgendwann eine Fat-Binary für PPC und Intel) Und es wird höchstwahrscheinlich nur auf Tiger vernünftig laufen. Alleine schon wegen des Launchd Startup-Items.

PostgreSQL auf OpenBSD

Für die Installation von Movable Type auf OpenBSD brauchte ich eine Datenbank. Die Wahl fiel auf PostgreSQL. Hier ist was ich tat, um PostgreSQL nach meinen Vorstellungen zu konfigurieren.

Diese Anleitung ist an einigen Stellen OpenBSD-spezifisch. Bei Linux muß logrotate statt newsyslog benutzt werden.

Zuerst muß man den Quelltext herunterladen und an geeigneter Stelle extrahieren. Den Quelltext kompilieren und die fertigen Programme zu installieren funktioniert mit dem üblichen GNU-Dreisatz: (die letzte Zeile sollte man als root aufrufen)

./configure—prefix=/usr/local—with-perl—with-openssl=/usr
make
make install

Damit hat man schon mal alle nötigen Programme installiert. PostgreSQL braucht aber noch einige Vorarbeit, um zu funktionieren. PostgreSQL möchte unter einem eigenen Benutzer laufen. Die folgenden Zeilen legen diesen Benutzer samt passender Gruppe an. (natürlich als root)

groupadd -g 164 pgsql
useradd -c “PostgreSQL Admin User” -d /var/pgsql -g 164 -u 164 -s /bin/sh pgsql

Nun fehlt noch das Datenbankverzeichnis, in dem PostgreSQL seine Daten ablegt. Dieses Verzeichnis sollte dem PostgreSQL-Benutzer gehören.

mkdir /var/pgsql
chown pgsql:pgsql /var/pgsql
chmod 755 /var/pgsql

Jetzt muß die Datenbank initialisiert werden. Da alle Dateien im Datenbankverzeichnis dem PostgreSQL-Benutzer gehören sollten, sollte dies als der PostgreSQL-Benutzer geschehen.

su pgsql
/usr/local/bin/initdb -D /var/pgsql/data

Damit ist die Datenbank im Grunde fertig und kann benutzt werden. Es fehlen aber noch einige Kleinigkeiten, damit das alles rund läuft.

Zuerst soll PostgreSQL beim Booten gestartet werden. Die nächsten Zeilen sollten an passender Stelle in die /etc/rc.local aufgenommen werden: (wieder als root)

if [ -x /usr/local/bin/pg_ctl ]; then
        su -l pgsql -c “/usr/local/bin/pg_ctl start \
                -D /var/pgsql/data -l /var/pgsql/logfile”
        echo -n ‘ postgresql’
fi

Natürlich soll PostgreSQL beim Herunterfahren von OpenBSD sauber beendet werden, um inkonsistenzen in der Datenbank zu verhindern. Dies erledigen diese Zeilen in der /etc/rc.shutdown:

if [ -f /var/pgsql/data/postmaster.pid ]; then
        su -l pgsql -c “/usr/local/bin/pg_ctl stop \
                -D /var/pgsql/data”
        echo -n ‘ postgresql’
fi

PostgreSQL soll über syslogd(8) loggen. Das macht es einfacher, auf einem zentralen Logging-Host zu loggen. Hier müssen in der /var/pgsql/data/postgresql.conf 3 Zeilen angepasst werden. Die Zeilen stehen schon in der Datei drin, sind jedoch auskommentiert.

syslog = 2                      # range 0-2; 0=stdout; 1=both; 2=syslog
syslog_facility = ‘LOCAL0’
syslog_ident = ‘postgres’

Selbverständlich muß der syslogd(8) auch wissen, was er mit den Daten anfangen soll. Darum kümmert sich diese Zeile in der /etc/syslog.conf:

local0.*                                                /var/log/pgsql

Bevor der syslogd(8) nun restarted wird, damit er anfangen kann zu loggen, sollte noch ein leeres Logfile angelegt werden, da der syslogd(8) dies in der Regel nicht tut. Mit touch /var/log/pgsql entsteht ein leeres Logfile an. Schicke ein SIGHUP an syslogd(8) um ihn zu restarten.

Die Logfiles sollten noch in regelmäßigen Abständen rotiert werden, damit das Dateisystem nicht überläuft. Bei OpenBSD kümmert sich newsyslog(8) um das Rotieren von Logfiles. Eine Zeile in der /etc/newsyslog.conf erledigt dies:

/var/log/pgsql                          640  7    *    168   Z

Damit ist PostgreSQL nun bereit zum Einsatz. Um den Server nun endlich zu starten, kann der gleiche Code benutzt werden, wie er auch in der /etc/rc.local steht. Viel Spaß mit PostgreSQL.