SuperX

KontaktMail für InfosSuchenLogin

Neuinstallation Postgres vom Quellcode

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.