Die relationale Datenbank PostgreSQL

Andreas Popper


Inhaltsverzeichnis

1 Installation von Postgres-7.x
Kurzfassung
Benutzer und Heimatverzeichnis einrichten
Umgebungsvariablen setzen
2 Start von PostgreSQL beim Booten
RedHat
SuSE Linux
3 Initialisieren von PostgreSQL, User und Datenbanken anlegen
4 Dokumentation für PostgreSQL

Als Datenbank für das Projekt xml2sql wurde das OpenSource-RDBMS PostgreSQL gewählt (http://www.postgresql.org). Dafür gab es mehrere Gründe:

  • Der Leistungsumfang ist von allen OpenSource-Datenbanken am größten. Funktionen wie Transaktionen, referentielle Integrität und der Umgang mit Blobs (binary large objects) sind vorhanden.
  • Die Datenbank ist hervorragend dokumentiert und diese Dokumente sind im Netz frei zugänglich.
  • Es gibt Treiber für alle Schnittstellen (JDBC, TCL, Perl, Python, ODBC u.a.m)
  • Mit pgAccess steht ein ausgezeichnetes GUI-Frontend zur Verfügung
  • Bei Vergleichen von OpenSource-DB's hat PostgreSQL immer gut abgeschnitten.

Als schnelle und einfach zu installierende Alternative kam MySQL in die engere Wahl. Dass letztendlich PostgreSQL eingesetzt wurde, lag z.T. auch an den Vorerfahrungen des Projektführenden.

Kapitel 1. Installation von Postgres-7.x

PostgreSQL gehört zu jeder Linux-Distribution dazu und ist von dort leicht zu installieren. Für Hartgesottene und alle, die wirklich das Neueste brauchen, hier die Installation aus den Sourcen.

  • Besorgen des Sourcecodes:
    ftp://ftp.de.postgresql.org/pub/Postgres-7.1.3 (aktuell am 16.10.2001 ist die Version: 7.1.3)
  • Kopie nach: /usr/local.
  • Auspacken mit: tar -xzf postgresql-7.1.3.tar.gz
    Es entsteht das Verzeichnis: /usr/local/postgresql-7.1.3
  • Dort findet sich eine ausführliche INSTALL-Anleitung, nach der jetzt verfahren wird.

Kurzfassung

Absolute Kurzfassung, funktioniert nur, wenn man völlig neu installiert und auch keinen User namens Postgres (mehr) hat.

Im nach dem Auspacken der Sourcen entstandenen Verzeichnis:
/usr/local/postgresql-7.1.3 werden auf der Kommandozeile folgende Kommandos ausgeführt:

  • ./configure
  • gmake
  • gmake install
  • useradd -d /usr/local/pgsql postgres
  • su - postgres
  • /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
  • /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &
  • /usr/local/pgsql/bin/createdb test
  • /usr/local/pgsql/bin/psql test

Ganz Mutige können sich das auch als Shell-Script kopieren, ausführen und erst einmal einen Kaffee trinken gehen...

Benutzer und Heimatverzeichnis einrichten

Bei der Installation von RedHat wird PostgreSQL mit installiert und entsprechend der User postgres mit angelegt. Außerdem gibt es die Dateien von PostgreSQL im Verzeichnis: /var/lib/pgsql.

Das Verzeichnis /var/lib/pgsql muss gelöscht und die Rechte auf:
/usr/local/pgsql
für den User: postgres gesetzt werden:
chown postgres /usr/local/pgsql;

Dieses Verzeichnis wird mit: gnome-Linuxconf-Benutzeraccounts als Heimatverzeichnis für User: postgres eingerichtet.

SuSE: mit Yast:Administration:Benutzverwaltung

Umgebungsvariablen setzen

Die Umgebungsvariablen $PGDATA und $PGLIB werden gesetzt in:
/etc/profile (Red Hat):
/etc/profile.local (SuSE):

						
PATH=/usr/local/bin:/usr/X11R6/bin:/usr/local/pgsql/bin:/usr/lib/jdk1.3.1/bin

##################################
# Pfade für Postgresql
##################################

PGDATA=$PGDATA/usr/local/pgsql/data

MANPATH=$MANPATH/usr/local/pgsql/man

PGLIB=$PGLIB/usr/local/pgsql/lib

export PATH PGDATA PGLIB						
						

Kapitel 2. Start von PostgreSQL beim Booten

Inhaltsverzeichnis

RedHat
SuSE Linux

RedHat

Aus Sicherheitsgründen darf der User: root nicht PostgreSQL starten.
Um nun nicht bei jedem Anfahren des Rechners zum User postgres wechseln zu müssen und dort im Verzeichnis: /usr/local/pgsql/bin mit:
pg_ctl start den Datenbank-Server zu starten, kann das Start-und Stopverhalten beim Booten/Herunterfahren über ein Skript kontrolliert werden.

Der ausführbare File:
/usr/local/postgresql-7.1.3/contrib/linux/postgres.init.sh

wird mit ./postgresql.init.sh install ausgeführt und installiert nach:
/etc/rc.d/init.d/postgres
Er ist hier noch einmal dokumentiert: postgres.init.sh

In /etc/rc.d/init.d/postgres müssen noch zwei Einträge geändert werden, damit das PostgreSQL-Startprogramm:
postmaster mit dem -i Flag läuft und Requests auf TCP/IP-Ebene entgegennimmt und beantwortet:

POSTMASTER="postmaster -i"
				
und:
				
#
# Add the "-i" option to enable TCP/IP sockets in addition
# to unix domain sockets.  This is needed for Java's JDBC
#
PGOPTS="-i"
				

SuSE Linux

SuSE hat ein ähnliches, aber durch dieses nicht ersetzbares Skript. Hier kommt es darauf an, die /etc/rc.config richtig zu konfigurieren:


#
# Should the postgres daemon be startet automatically on system startup?
#
START_POSTGRES="yes"

#
# In which directory should the PostgreSQL database reside?
#
POSTGRES_DATADIR="/usr/local/pgsql/data"

#
# The options that are given to the PostgreSQL master daemon on startup.
# See the manual pages for postmaster and postgres for valid options.
# Don't put "-D datadir" here since it is set by the startup script.
# Don't change this, unless you know what you do.
#
POSTGRES_OPTIONS="-i"				 
				 

Mit dem Skript, das SuSE mitbringt, wird Postgres dann einwandfrei ausgeführt:
/etc/init.d/postgres

Wenn noch nicht vorhanden, muss das Verzeichnis:
/usr/local/pgsql/log/ erzeugt werden. Danach müssen noch die richtigen Rechte dafür gesetzt werden:
Im Verzeichnis: /usr/local/pgsql wird das Kommando ausgeführt:
chmod postgres:users
Danach kann mit einem /etc/init.d/postgres start getestet werden, ob alles funktioniert. Das Skript meldet im Erfolgsfall ein done.

Damit das nun auch beim Hochfahren startet, müssen Symlinks auf die entsprechenden Runlevel gesetzt werden:
Ursprung:
/etc/init.d/postgres
Symlinks:
/etc/init.d/rc.2/K14postgres
/etc/init.d/rc.2/S10postgres
/etc/init.d/rc.3/K13postgres
/etc/init.d/rc.3/S10postgres
/etc/init.d/rc.5/K13postgres
/etc/init.d/rc.5/S10postgres

Die Konfigurationsdatei für PostgreSQL heißt pg_hba.conf und wird angelegt in der Umgebungsvariablen: $PGDATA, also in diesem Falle in /usr/local/pgsql/data.
Dort werden u.a. die Eintragungen gemacht, mit denen PostgreSQL auch auf TCP/IP hört:

				
# Meine Einträge:217.89.71.35

host         root    217.89.71.35  255.255.255.0     trust 
host         geronimo 217.89.71.35    255.255.255.0    trust
host         xml      217.89.71.35     255.255.255.0    trust
				

Kapitel 3. Initialisieren von PostgreSQL, User und Datenbanken anlegen

  • Einloggen als User: postgres
  • initdb erstellt die initiale Datenbank
  • createuser postgres erstellt den Datenbank-User: postgres (nicht zu verwechseln mit dem System-User: postgres)
  • createuser root legt den User: root an (die gleichnamigen System-User sollten existieren)
  • Ausloggen, als System-User einloggen
  • mit createdb (dbname) können beliebig viele Datenbanken angelegt werden.

Beim nächsten Booten startet PostgreSQL automatisch und alle Datenbanken stehen sofort zur Verfügung.

Kapitel 4. Dokumentation für PostgreSQL

Die Datenbank kommt mit einer ausgezeichneten Dokumentation, die unter:
/usr/local/pgsql/doc/html/postgres.html zu erreichen ist.

Außerdem steht online das Buch von Bruce Momijan zur Verfügung:
http://www.ca.postgresql.org/docs/aw_pgsql_book/index.html

Das Buch ist bei Addison Wesley in deutscher Übersetzung erschienen; nach meiner Meinung nicht nur das beste Buch zu Datenbanken, sondern eines der besten auf dem IT-Buchmarkt überhaupt, vergleichbar mit LaTeX von Kopka und Linux von Kofler!