Voraussetzungen
Postgres läuft unter verschiedenen UNIX-Varianten, z.B. Linux, HP-UX oder MacOS X. Wir empfehlen Linux. Vor der Installation unter Linux sollte die Locale-Umgebungsvariable $LANG auf den gewünschten Wert geändert werden (de_DE.utf8 oder de_DE@euro oder eine andere deutsche Locale (meist in /usr/lib/locale). Die aktuelle Locale wird bei der Installation von Postgres berücksichtigt und sorgt dafür, dass Datums- und Währungsformate korrekt sind.
Bei SuSE Linux ist es für ein Kompilieren der Postgres-Quellen erforderlich, dass die Pakete gcc, glibc, gettext, gettext-devel, readline, readline-devel, zlib und zlib-devel installiert sind.
Bei Ubuntu / Debian:
apt-get install -y gettext libreadline8 libreadline-dev zlib1g zlib1g-dev
Erzeugen Sie zunächst den User postgres mit dem Homeverzeichnis der Postgres-Installation, z.B. unter Linux mit
useradd -g users -d /usr/local/pgsql postgres
In der Download-Version von Postgres wird Postgres standardmäßig nach /usr/local/pgsql installiert. Als DBSpace muss man ein oder mehrere Verzeichnisse anlegen und mit initdb vorbereiten. Die SuperX-Datenbank läßt sich dann in einem eigenen DBSpace ablegen.
Zunächst müssen Sie sich als root anmelden. Wir gehen im folgenden davon aus, dass die Quellen von Postgres im Verzeichnis
/usr/src/packages/SOURCES
liegen (das Archiv z.B. von postgresql-7.3.4.tar.gz muss hier entpackt werden).
Dann gehen Sie in das Verzeichnis postgresql-7.3.4, und führen folgende Befehle aus:
Postgres-Installation "in short":
./configure --enable-nls make make install mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data
Wenn Sie SSL Support benötigen, müssen Sie noch den Parameter
--with-openssl
hinzufügen. Wenn Sie Postgres in einem anderen Verzeichnis als /usr/local/pgsql installieren wollen, müssen Sie den Parameter
--prefix=-Pfadname-
hinzufügen. Weitere Optionen fürs configure gibt die Zeile
./configure --help
Damit sind die Schritte, die als root auszuführen sind, beendet. Wir wechseln nun zur Kennung postgres mit
su - postgres
Vor der Initalisierung des DBSPACE sollte die Sprachumgebung des Users postgres korrekt sein. Für die bash wird in den meisten Distributionen die Umgebung generell in der Datei .bashrc bzw. .profile im Homeverzeichnis des Users postgres gesetzt; dort geben Sie den Pfad für das data-Verzeichnis an, und legen die Ausführprogramme von Postgres in den Datenpfad. Hier ein Beispiel für den Betrieb mit UTF-8:
export LANG=de_DE.utf8 #Zur Sicherheit für Postgres auch einzeln: export LC_CTYPE='de_DE.utf8' export LC_COLLATE='de_DE.utf8' export LC_TIME='de_DE.utf8' export LC_NUMERIC='de_DE.utf8' export LC_MONETARY='de_DE.utf8' export LC_MESSAGES='de_DE.utf8' PATH=$PATH:/usr/local/pgsql/bin export PGDATA=/usr/local/pgsql/data export PGLIB=/usr/local/pgsql/lib ...
Wenn die Sprachumgebung stimmt, dann wird der DBSPACE vom User postgres initialisiert.
/usr/local/pgsql/bin/initdb -D $PGDATA
Durch initdb wird der DBSpace erzeugt. Wenn die Umgebung stimmt, dann wird Postgres für die deutsche Locale vorbereitet (Sortierung von Zeichen, Datums- und Währungsformate etc).
Ausgabe von initdb: /usr/local/pgsql/bin/initdb -D $PGDATA The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale de_DE.utf8. This locale setting will prevent the use of indexes for pattern matching operations. If that is a concern, rerun initdb with the collation order set to "C". For more information see the Administrator's Guide.
Dann müssen Sie die ip-Nummer des Rechners mit dem SuperX-Webserver (sowie von allen anderen Clients, die direkt auf die Datenbank zugreifen sollen) in die Datei /usr/local/pgsql/data/pg_hba.conf eintragen. In der Datei $PGDATA/pg_hba.conf stehen die Verbindungsberechtigungen für der Server; hier müssen Sie mindestens dem User superx die Verbindungsrechte geben, z.B. mit folgender Zeile:
Auszug aus pg_hba.conf
host all all 127.0.0.1/32 trust host all all 192.168.0.16/32 trust
Die obige Zeile gibt dem User superx Verbindungsrechte für alle Datenbanken auf dem lokalen Rechner 192.168.0.16.
Die Netzmaske "/32" schränkt die Regel einen Rechner ein (entspricht 255.255.255.255). Wenn Sie "/24" wählen, öffnen Sie die Netzmaske auf 255.255.255.0, d.h. bei obigem Beispiel alle Rechner im Netz 192.168.0.x.
Bitte beachten Sie, dass die Standardvorgabe nach der Installation von Postgres die ist, dass alle User auf dem aktuellen Rechner mit dem Datenbankserver verbinden dürfen. Dies sollten Sie natürlich ändern.
Wenn Sie statt "trust" den Wert "md5" eingeben, dann erfolgt eine Passwortabfrage. Dies ist für nächtliche Ladejobs nicht praktikabel. In diesem Falle müssen Sie das Passwort per Client übergeben, entweder mit einer Datei "~/.pgpass" mit dem Inhalt:
-Servername-:-Port>:-Datenbank-:-Kennung-:-Passwort-
z.B.
dbserver.hochschule.de:5432:superx:superx:anfang12
Alternativ kann man auch die Umgebungsvariable PGPASSWORD mit dem Passwort belegen, dies ist allerding "deprecated" und wird in zukünftigen Versionen von Postgres unterbunden.
Weitere Parameter werden in der Konfigurationsdatei postgresql.conf definiert; wichtig ist die Einstellung, dass Postgres einen TCP-IP-Socket öffnet (Parameter listen_addresses=-IP-Nr-) sowie der TCP-IP-Port (port = 5432 ist die Standardvorgabe). Die Anzahl der gleichzeitig offenen Verbindungen muss kleiner sein als die Anzahl, die Sie für das SuperX-Servlet definieren. Weitere Details zur Einrichtung von Postgres-Runtime-Parametern finden Sie im Admin-Handbuch der Postgres-Distribution.
Danach wird der Datenbankserver gestartet mit dem Befehl postmaster.
/usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data
Wir empfehlen, die Ausgabe von dem Prozeß in eine Logdatei zu schreiben, z.B. nach /var/log/postgresql.log. Legen Sie diese Datei als User root an, und machen Sie dann den User postgres zum Eigentümer. Ein Beispielscript ist folgendes (im Kernmodul zu finden unter $SUPERX_DIR/db/install):
pgsql_start.x -Ein Beispielscript zum Start von Postgres
#!/bin/sh PG_HOME=/usr/local/pgsql export PG_HOME PGDATA=$PG_HOME/data export PGDATA PGPORT=5432 export PGPORT $PG_HOME/bin/pg_ctl -D $PGDATA -l /var/log/postgresql.log -o -i start
Um zu testen, ob die Locale richtig ist, gehen Sie als User postgres in die Shell:
psql template1
die Datenbank; dann geben Sie ein:
select 'aaa' union select 'bbb' union select 'äää' order by 1;
Bei richtiger Locale lautet die Ausgabe:
?column? ---------- aaa äää bbb
( 3 rows)
Im Verzeichnis $SUPERX_DIR/db/install befindet sich ein Shellscript check_sortierung_pg.x, das prüft, ob die aktuell in der Umgebung festgelegten Variablen zu korrekter Darstellung von Umlauten und Sortierung unter Postgres der gewünschte Ergebnis bringen. Das Script legt einen temporären DBSPACE an, führt darin einen Testselect aus und löscht den DBSPACE wieder, in der Logdatei check_sortierung.log steht dann das Ergebnis. In dem Script muss die Variable PG_HOME korrekt gesetzt sein, der Rest wird automatisch geprüft.
Dann erzeugen Sie den User superx für Postgres:
createuser superx
Dieser User muss Datenbanken erzeugen dürfen, braucht aber, wenn Sie als SuperUser bereits die Prozedursprache plpgsql in template1 installiert haben, kein Super-User sein bzw. bei Postgres 7.4 das Recht haben, andere User erzeugen zu dürfen. Aus Sicherheitsgründen empfehlen wir, den User superx, der standardmäßig auch der User ist, mit der die Webapplikation auf die Datenbank zugreift, nicht zum Super-User zu machen.
Wenn der User ein SuperUser sein soll, geben Sie ein:
createuser --superuser superx
ggfs.
ALTER USER superx WITH PASSWORD 'new_password';
Bei Änderungen der pg_hba.conf müssen Sie übrigens Postgres nicht neu starten, Sie können die Datei im laufenden Betrieb auch mit pg_ctl -D $PGDATA reload neu laden.
Damit ist Postgres installiert und für die SuperX-Installation konfiguriert. Bei dieser Gelegenheit sollten Sie den Datenbankserver gleich als Dienst beim Systemstart einrichten.