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.0.2 genügen.
Nach dem Download der Sourcen, können wir den Code durch den Aufruf von 'tar xvfz postgresql-8.0.2.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.
http://www.postgresql.at