Source Code kompilieren

Die Installation 'from source' ist im Fall von PostgreSQL nicht sonderlich schwierig sondern geht in der Regel recht flott von der Hand. Auf den allermeisten Systemen hat man in weniger als 10 Minuten und nach wenigen Handgriffen ein betriebsbereites System, das keine Wünsche offen lässt.

Im ersten Schritt müssen Sie sich von einem lokalen Mirror eine Kopie des Quellcodes downloaden. Für unsere Zwecke sollte Version 8.4.1 genügen.

Nach dem Download der Sourcen, können wir den Code durch den Aufruf von 'tar xvfz postgresql-8.4.1.tar.gz' entpacken. Anschließend können wir bereits daran gehen, den Code zu konfigurieren. Wie viele andere Open Source Produkte so basiert auch PostgreSQL auf autoconf und automake. Beide Tools müssen also installiert sein, um configure aufrufen zu können.

Die Option '-help' gibt eine Liste von Optionen aus, die vom aktuellen Source Package zur Verfügung gestellt werden. Sehen wir uns einige wesentliche Optionen im Detail an:

Um den Code in /usr/local/pg8 zu installieren, können Sie wie folgt vorgehen:

./configure --prefix=/usr/local/pg8 --enable-thread-safety

Sofern das Script durchgelaufen ist, können Sie den Code bereits kompilieren:

gmake && gmake install

Achten Sie darauf, dass Sie GNU Make verwenden, da anderen Varianten von Make nicht unterstützt werden.

Ist der Code erst einmal kompiliert, können Sie den Datenbankcluster bereits initialisieren. Das Initialisieren des Datenbankclusters ist nichts Anderes als das Erzeugen einer Datenbankinstanz wie Sie das möglicherweise von Oracle her kennen. In PostgreSQL verwendet man zum Anlegen einer Instanz den Befehl initdb:

[hs@athlon data3]$ /usr/local/pg8/bin/initdb -D /data3/db8/ -E sql_ascii
The files belonging to this database system will be owned by user "hs".
This user must also own the server process.

The database cluster will be initialized with locale C.

fixing permissions on existing directory /data3/db8 ... ok
creating directory /data3/db8/global ... ok
creating directory /data3/db8/pg_xlog ... ok
creating directory /data3/db8/pg_xlog/archive_status ... ok
creating directory /data3/db8/pg_clog ... ok
creating directory /data3/db8/pg_subtrans ... ok
creating directory /data3/db8/base ... ok
creating directory /data3/db8/base/1 ... ok
creating directory /data3/db8/pg_tblspc ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 1000
creating configuration files ... ok
creating template1 database in /data3/db8/base/1 ... ok
initializing pg_shadow ... ok
enabling unlimited row size for system tables ... ok
initializing pg_depend ... ok
creating system views ... ok
loading pg_description ... ok
creating conversions ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

    /usr/local/pg8/bin/postmaster -D /data3/db8
or
    /usr/local/pg8/bin/pg_ctl -D /data3/db8 -l logfile start

'-D' gibt an, in welchem Unterverzeichnis der Cluster erzeugt werden soll. Das verwendete Verzeichnis muss leer sein. Dabei ist zu beachten, dass das Verzeichnis dem Benutzer gehört, der das initdb durchführt. Üblicherweise wird PostgreSQL als Benutzer 'postgres' betrieben - das ist aber nicht unbedingt erforderlich sondern stellt lediglich eine Konvention dar.

-E definiert das Encoding, das für den Datenbankcluster defaultmässig verwendet werden soll. In unserem Fall wollen wir, dass normaler Text verwendet wird. PostgreSQL unterstützt eine Reihe von anderen Encodings, die keine Wünsche offen lassen:

SQL_ASCII ASCII
EUC_JP Japanese EUC
EUC_CN Chinese EUC
EUC_KR Korean EUC
JOHAB Korean EUC (Hangle base)
EUC_TW Taiwan EUC
UNICODE Unicode (UTF-8)
MULE_INTERNAL Mule internal code
LATIN1 ISO 8859-1 ECMA-94 Latin Alphabet No.1
LATIN2 ISO 8859-2 ECMA-94 Latin Alphabet No.2
LATIN3 ISO 8859-3 ECMA-94 Latin Alphabet No.3
LATIN4 8859-4 ECMA-94 Latin Alphabet No.4
LATIN5 8859-9 ECMA-128 Latin Alphabet No.5
LATIN6 ISO 8859-10 ECMA-144 Latin Alphabet No.6
LATIN7 ISO 8859-13 Latin Alphabet No.7
LATIN8 ISO 8859-14 Latin Alphabet No.8
LATIN9 ISO 8859-15 Latin Alphabet No.9
LATIN10 ISO 8859-16 ASRO SR 14111 Latin Alphabet No.10
ISO-8859-5 ECMA-113 Latin/Cyrillic
ISO-8859-6 ECMA-114 Latin/Arabic
ISO-8859-7 ECMA-118 Latin/Greek
ISO-8859-8 ECMA-121 Latin/Hebrew
KOI8 KOI8-R(U)
WIN Windows CP1251
ALT Windows CP866
WIN1256 Arabic Windows CP1256
TCVN Vietnamese TCVN-5712 (Windows CP1258)
WIN874 Thai Windows CP874

Ist die Instanz erst einmal angelegt, kann die Datenbank bereits gestartet werden:

/usr/local/pg8/bin/pg_ctl _D /data3/db8 -o "-i" -l ein_log_file start

Auch wenn Ihnen die UNIX Shell meldet, dass die Datenbank erfolgreich gestartet worden ist, sollten Sie das sicherheitshalber nachprüfen:

[hs@athlon data3]$ ps ax | grep post
 8436 ?        S      0:00 /usr/local/pg8/bin/postmaster -D /data3/db8
 8438 ?        S      0:00 postgres: writer process
 8439 ?        S      0:00 postgres: stats buffer process
 8440 ?        S      0:00 postgres: stats collector process
22077 pts/2    D      0:00 grep post

Ein Ok von der UNIX Shell bedeutet nicht, dass die Datenbank wirklich erfolgreich gestartet werden konnte. Lediglich der Startprozess konnte korrekt ausgeführt werden - sofern beim Laden der Einstellungen oder dergleichen ein Fehler passiert, wird dieser vom Init-Script nicht mehr bemerkt.

Im nächsten Schritt können Sie bereits das Frontend starten:

[hs@athlon data3]$ /usr/local/pg8/bin/psql -l
       List of databases
   Name    | Owner | Encoding
-----------+-------+-----------
 postgres  | hs    | SQL_ASCII
 template0 | hs    | SQL_ASCII
 template1 | hs    | SQL_ASCII
(3 rows)

'psql -l' liefert eine Liste der aktuell am System verfügbaren Datenbanken. Liefert 'psql -l' Output, ist die Datenbank funktionsfähig.


Cybertec Schönig & Schönig GmbH
PostgreSQL support, training, consulting
www.postgresql-support.de