SelfLinux Anwendungs-Software Datenbanken PostgreSQL Abschnitt 2 | SelfLinux-0.13.0

| PostgreSQL | Autor Formatierung GFDL

#### 2 Installation

Die Installation gliedert sich im Wesentlichen in zwei Komplexe. Zum Einen muss zunächst natürlich die Software selbst installiert werden. Zum Anderen müssen einige Dinge eingestellt und eine erste Datenbank muss erzeugt werden.

Die meisten Linuxdistributionen sollten PostgreSQL als Softwarepakete anbieten. Auf Grund der Größe sind es oft sogar mehrere. Mit der Installation solcher Pakete wird in der Regel auch die Grundkonfiguration durchgeführt, so dass PostgreSQL sofort nach dem Installieren gestartet und benutzt werden kann.

#### 2.1 Installation der Software

Verfügt die verwendete Distribution über Softwarepakete, so sollten diesem im Allgemeinen vorgezogen werden und mit den DistributionsProgramme installiert werden. Dies spart mindestens viel Arbeit und Zeit. Installiert man beispielsweise die Pakete von SuSE, so kann man die Datenbank sofort nach der Installation starten.

Es ist natürlich auch möglich, PostgreSQL als Quellpaket über http://www.postgresql.org/ downzuladen und es selbst zu kompilieren. Dies ist insbesondere dann notwendig, wenn man ganz bestimmte Einstellungen benötigt, beispielsweise Unterstützung für bestimmte Zeichensätze. Der Rest dieses Kapitels beschäftigt sich mit diesem Verfahren und kann ausgelassen werden, wenn ein Distributionspaket verfügbar ist.

PostgreSQL verwendet ./configure und make zum Übersetzen und verhält sich damit sehr ähnlich zu GNU Software - jedoch sind einige zusätzliche Schritte nach dem Installieren notwendig. Die Installation unter Windows/Cygwin ist nicht Thema dieses Dokumentes, hier wird ausschließlich auf Linux eingegangen.

#### 2.1.1 Vorbedingungen

Um die Datenbanksoftware selbst übersetzen zu können, müssen etliche Programme verfügbar sein. Eine halbwegs aktuelle Linuxdistribution vorausgesetzt, sind diese aber entweder bereits installiert oder als Softwarepakete verfügbar.

Neben GNU-make ist natürlich ein C Compiler erforderlich. Der GCC ist hier gut geeignet. PostgreSQL stellt also keine hohen oder speziellen Anforderungen an das System.

#### 2.1.2 Auspacken und Vorbereiten

Über http://www.postgresql.org/ besorgt man sich ein Paket der Software. Im Beispiel wird die Version 7.2.1 verwendet. Die Schritten sollten bei neueren (und älteren) Versionen analog sein.

Die erhaltenen Quellen packt man zunächst aus:

root@linux # tar xzf postgresql-7.2.1.tar.gz

Führt man ein update durch, so sollte man unbedingt spätestens jetzt die Datenbank in eine Datei sichern. Das kann man mit dem PostgreSQL Programm pg_dump oder pg_dumpall erledigen:

root@linux # pg_dumpall > backup.sql

Genaueres findet sich im Abschnitt Backup. Anschließend vergewissert man sich, dass das Backup erfolgreich war und stoppt die (alte) Datenbank. Das Datenverzeichnis der alten Datenbank sollte aus Sicherheitsgründen umbenannt werden:

root@linux # mv /usr/local/pgsql /usr/local/pgsql.old

Dieser Pfad ist bei Distributionen in der Regel anders; SuSE und RedHat verwenden beispielsweise /var/lib/pgsql/data.

Nun führt man in dem Verzeichnis, das durch das tar Kommando entstanden ist, configure aus. Dabei kann man etliche Optionen angeben. Neben die üblichen GNU Optionen wie beispielsweise --prefix, gibt es auch viele PostgreSQL spezifische Optionen.

Ist ein produktiver Einsatz geplant, so sollte die Dokumentation zu Rate gezogen werden, und ausführliche Tests gefahren werden.

Einige wichtige Optionen:

--enable-locale | Aktiviert locale-Unterstützung. Dies kostet etwas Performanz, ist aber im nicht-englischsprachigem Raum sehr sinnvoll
--enable-multibyte | Aktiviert Multibyte Unterstüzung (unter anderem Unicode). Java und TCL erwarten beispielsweise Multibyte. Diese Option sollte daher nach Möglichkeit gesetzt werden.
--enable-nls | Aktiviert Sprachunterstützungen, um Meldungen in Landessprache geben zu können.
--with-CXX --with-perl --with-python --with-tcl --with-java | C++, Perl, Python, TCL beziehungsweise Java (JDBC) Bibliotheken erzeugen. Für Java wird das Programm "ant" benötigt.
--enable-odbc --with-iodbc --with-unixodbc | Erzeugt ODBC Treiber. Es kann unabhängig vom DriverManger erzeugt werden (weder --with-iodbc noch --with-unixodbc), für die Verwendung mit iODBC oder unixODBC, nicht jedoch für beide.
--with-openssl | OpenSSL SSL/TLS Unterstützung aktivieren
--with-pam | PAM Unterstützung aktivieren
--enable-syslog | Syslog Unterstützung aktivieren (kann dann bei Bedarf konfiguriert werden)

Ein Aufruf könnte also wie folgt aussehen:

root@linux # ./configure --enable-unicode-conversion --enable-multibyte=UNICODE \ --with-CXX --with-perl --with-python --with-tcl --with-java \ --enable-odbc --with-unixodbc \ --with-pam --enable-syslog \ --enable-locale

Die Auswahl der Parameter ist kompliziert und hängt von vielen Faktoren ab, daher sollte auf Distributionspakete zurückgegriffen werden, soweit möglich.

#### 2.1.3 Übersetzen und Installieren

Nach dem configure übersetzt man wie gewohnt mit:

root@linux # make

Optional kann man Regressionstests durchführen:

root@linux # make check

Die eigentliche Installation wird mit

root@linux # make install

durchgeführt. Dies macht man in der Regel als root.

Je nach Configure-Optionen installiert PostgreSQL Bibliotheken beispielsweise in /usr/local/pgsql/lib. Dieser Pfad sollte dann in /etc/ld.so.conf eingetragen werden (das Ausführen von ldconfig ist danach notwendig). Gegebenenfalls fügt man den Pfad zu den Binärprogrammen zum Pfad hinzu, beispielsweise in dem man /usr/local/pgsql/bin zum PATH in /etc/profile hinzufügt.

#### 2.2 Grundkonfiguration

Bevor PostgreSQL gestartet werden kann, müssen noch einige Einstellungen durchgeführt werden. Verwendet man Distributionspakete, so können diese Schritte in der Regel entfallen.

#### 2.2.1 Datenbank Systembenutzer

Das DBMS benötigt einen Systembenutzer. Darüber hinaus können natürlich viele Datenbankbenutzer existieren. Beide Benutzerarten dürfen keinesfalls verwechselt werden. Der Systembenutzer ist der Benutzer, dem später die Datenbankdateien gehören. Diesem Benutzer ist wohl nie eine Person assoziiert (im Gegensatz zu den Datenbankbenutzern).

Ein gutes Beispiel für einen Systembenutzernamen ist postgres, wie er beispielsweise von SuSE und RedHat verwendet wird (root ist in keinem Fall geeignet). Den Benutzer kann man einfach erzeugen:

root@linux # useradd postgres

und so sperren, dass man sich nicht einloggen kann:

root@linux # passwd -l postgres

Nun kann nur root über das su Kommando auf den postgres Benutzer zugreifen.

#### 2.2.2 Erzeugen einer initialen Datenbank

Um PostgreSQL starten zu können, muss eine Datenbankgrundstruktur vorhanden sein. Hierbei handelt es sich im Wesentlichen um eine komplizierte Verzeichnisstruktur, die mit dem Programm initdb erzeugt werden sollte. Dieses Programm sollte auf jeden Fall mit dem oben genannten Benutzer durchgeführt werden. Ist das Datenverzeichnis beispielsweise /usr/local/pgsql/data, bietet sich folgende Kommandokette (begonnen als root!) an:

root@linux # mkdir /usr/local/pgsql/data root@linux # chown postgres /usr/local/pgsql/data root@linux # su - postgres root@linux postgres# initdb --pwprompt -D /usr/local/pgsql/data

Dieses Kommando verwendet die gerade eingestellten locale als Sortierfolge in Indizes. Diese kann später nicht mehr einfach geändert werden. Ein Nachteil bei der Verwendung von locale ist, dass der LIKE Operator und reguläre Ausdrücke diese Indizes nicht verwenden können - und dadurch langsam werden. Möchte man lieber keine (oder andere) locale für diesen Fall, setzt man vor initdb die Variable LC_COLLATE. Beispielsweise kann man die locale auf den Standard C setzen:

root@linux postgres# LC_COLLATE="C" initdb --pwprompt -D /usr/local/pgsql/data

Möchte man dies später ändern, so muss ein Komplettbackup gemacht werden, die Datenbank heruntergefahren, initdb erneut ausgeführt und nach dem Start muss das Backup wieder eingespielt werden. Dies ist ja nichts überraschendes; die sort order kann man eben nicht nachträglich einstellen, dass ist wohl bei allen DBMS so.

Durch initdb wird eine erste Datenbank erzeugt. Diese heißt template1. Wie der Name schon andeutet, wird diese als Vorlage beim Erzeugen neuer Datenbanken verwendet; daher sollte man mit dieser Datenbank nicht arbeiten (da dies zukünftige neue Datenbanken beeinflussen würde).

Im Beispielaufruf wird auch gleich ein Passwort für den Datenbankadministrator gesetzt. Setzt man kein Passwort, so gibt es kein gültiges (das heißt, man kann sich nicht als Administrator verbinden, wenn ein Passwort gefordert ist). Auf dieses Verhalten sollte man sich jedoch nicht verlassen, und das System lieber korrekt konfigurieren.