%
% postgresql.tex
% Last update: $Id$
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kapitel PostgreSQL %%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Der PostgreSQL Datenbank Server}
\marklabel{postgresqldatabase}{}
\index{PostgreSQL}


\section{Allgemeines}
PostgreSQL ist ein sehr leistungsf"ahiges relationales Datenbanksystem
das in seiner Funktionsvielfalt kaum W"unsche offen l"a"st. Dazu geh"ort
eine vollst"andige Unterst"utzung von Foreign Keys, Joins, Views, Triggers
und Stored Procedures. Es stehen die meisten Datentypen der Standards SQL92
und SQL99 zur Verf"ugung sowie auch die Speicherung von Daten in Binary
Large Objects (BLOBS).

Zur Anbindung von Client-Applikationen sind Programmierschnittstellen
f"ur eine Vielzahl von Programmiersprachen vorhanden. Darunter C/C++, Java,
Perl, Python, Ruby, Tcl und ODBC. Zudem steht das Programm unter einer sehr
liberalen Lizenz (BSD), die den Einsatz auch in kommerziellen Applikationen
erm"oglicht.

PostgreSQL ist mit einer sehr ausf"uhrlichen Dokumentation ausgestattet,
die auf der Homepage des Projekts zu finden ist. Zu beachten ist dabei,
dass die Konfiguration des Datenbankservers auf eisfair "uber die eisfair
Konfigurationsschnittstelle erfolgt und nicht, wie im Kapitel ''Server
Administration'' beschrieben, direkt mit den Konfigurationsdateien des
Programms gearbeitet werden sollte.

Weitere Informationen zu PostgreSQL finden sich auf der offiziellen Web-
Seite des Projekts ''http://www.postgresql.org'' oder in deutscher Sprache
unter ''http://www.postgresql.de''.

\section{Installation}
Das Installationsskript f"uhrt die Installation des Datenbankservers aus,
ohne dass weitere Angaben notwendig sind.

Zu beachten ist, dass das PostgreSQL-Paket ab der Versio 9.6.5 in
versionierter Form angeboten wird. Damit ist gemeint, dass an den Paket-
namen zuk"unftig die Major- und Minor-Nummer der Paketversion angef"ugt
wird. So wird aus ''postgresql'' beispielsweise ''postgresql96''.

Dies hat eine Reihe von Konsequenzen:

\begin{itemize}
\item Es k"onnen mehrere Versionen von PostgreSQL parallel auf einem System
      installiert sein.
\item Die "Ubernahme der Daten aus einer "alteren Version kann und muss
      manuell durch den Anwender erfolgen.
\item Ein Hauptversionssprung wird nicht l"anger durch den Paketmanager
      automatisch vorgenommen. Statt dessen entsteht durch die neue Version
      ein neuer Paketnamen, der manuell installiert werden muss. Korrigierte
      Versionen innerhalb der selben Versionslinie (z.B. 9.6.x) werden dagegen
      automatisch aktualisiert.
\item Der Anwender kann den Ort frei w"ahlen, in dem das Datenverzeichnis
      des Server angelegt werden soll. Bei einer Deinstallation werden diese
      Daten nicht l"anger automatisch gel"oscht.
\item Die von PostgreSQL abgeleitete Client-Bibliothek ''libpq'' wird immer
      von der neusten Version des Datenbankservers entnommen und nicht
      versioniert. Die Bibliothek ist zu "alteren Versionen r"uckwaertskompatibel.
\item Die Namen der unten dokumentierten Konfigurationsoptionen sind in der
      Konfiguration um die Versionsnummer des Servers zu erg"anzen. So wird
      aus START\_POSTGRESQL beispielsweise START\_POSTGRESQL96.
\end{itemize}

Nach der Installation ist das Paketmen"u unterhalb des Men"upunkts
''Database server administration'' zu finden.

\section{Konfiguration}
Die Konfiguration von PostgreSQL unter eisfair erfolgt "uber den Men"upunkt
''Edit configuration'' im Paketmen"u. Die vorgenommenen "Anderungen werden nach
Beenden des Editors automatisch "ubernommen. Achtung: Dabei wird der Server
neu gestartet und alle Client-Verbindungen getrennt.

\subsection{Allgemeine Einstellungen}

\begin{description}
\config{START\_POSTGRESQL}{START\_POSTGRESQL}{STARTPOSTGRESQL}
    Wird dieser Wert auf ''yes'' gestellt, dann wird der \hbox{PostgreSQL} Dienst
    automatisch beim Start des Rechners mitgestartet. Anderenfalls ist das
    Starten und Beenden des Dienstes "uber das Paketmen"u jederzeit m"oglich.

    G"ultige Werte: \emph{''yes'', ''no''}

\config{POSTGRESQL\_DATADIR}{POSTGRESQL\_DATADIR}{POSTGRESQLDATADIR}
    Die Einstellung legt fest, unterhalb welchem Pfad das Verzeichnis angelegt
    werden soll, innerhalb dessen die Daten der Datenbanken abgelegt werden
    sollen. Stellt die Konfigurationsschicht fest, dass das
    angegebenen Verzeichnis noch nicht existiert, dann wird es automatisch
    angelegt und es wird ein neuer Datenbank-Cluster initialisiert.

    Beispiel: \emph{''/var/lib/pgsql96''}

\config{POSTGRESQL\_ENCODING}{POSTGRESQL\_ENCODING}{POSTGRESQLENCODING}
    Hier wird die Zeichenkodierung eingestellt, mit der der oben angegebene
    Speicherort f"ur Datenbanken initialisiert werden soll. Zugleich ist
    dies die Standardeinstellung f"ur neu erzeugte Datenbanken.
    Zu beachten ist, dass diese Einstellung nur dann wirksam wird, wenn
    der Speicherort erstmalig initialisiert wird, was normalerweise nur
    einmalig nach der Installation und der Aktvierung der Konfiguration
    der Fall ist. Ebenso findet die Initialisierung statt, wenn ein
    anderer leerer Speicherort (siehe oben) gew"ahlt wird.

    Beispiel: \emph{''LATIN9''}

\config{POSTGRESQL\_NETWORKING}{POSTGRESQL\_NETWORKING}{POSTGRESQLNETWORKING}
    Hiermit wird festgelegt, ob der Datenbankdienst "uber das Netzwerk erreichbar
    sein soll, oder nicht. Steht der Wert auf ''no'', kann nur vom
    lokalen Rechner aus auf die Datenbanken zugegriffen werden, anderenfalls
    ist dies auch von anderen Rechnern im Netzwerk oder auch aus dem Internet
    m"oglich. Zu beachten ist aber, dass zus"atzlich die Zugriffstabelle
    (Host access table) bestimmt, welche Verbindungen erlaubt sind und welche
    nicht.

    G"ultige Werte: \emph{''yes'', ''no''}

\config{POSTGRESQL\_CONNECT\_PORT}{POSTGRESQL\_CONNECT\_PORT}{POSTGRESQLCONNECTPORT}
    Dies ist die Anschlussnummer, "uber die der Datenbankserver "uber das
    Netzwerk erreichbar ist, sobald POSTGRESQL\_NETWORKING dies zul"asst.
    Die Nummer beeinflusst ebenfalls den Namen der benannten Pipe, "uber
    die lokal auf den Server zugegriffen werden kann.
    Bitte unbedingt beachten: Sobald mehrere Versionen von PostgreSQL
    auf einem Rechner gleichzeitig ausgef"uhrt werden sollen, m"ussen sich
    diese Server hinsichtlich der Anschlussnummer unterscheiden! Anderenfalls
    wird mindestens einer der Dienste nicht lauff"ahig sein bzw.
    nicht erreicht werden k"onnen.

    Standard: \emph{''5432''}

\config{POSTGRESQL\_CONNECTIONS}{POSTGRESQL\_CONNECTIONS}{POSTGRESQLCONNECTIONS}
    Hiermit wird definiert, wieviele gleichzeitige Verbindungen auf den
    Datenbankserver m"oglich sein sollen. Diese Zahl bestimmt den Speicherbedarf
    des Programms und kann aus "okonomischen Gr"unden angepasst werden.
    Dabei ist zu beachten, dass auch der ''Autovacuum-Dienst'' und die automatische
    Datensicherung jeweils eine eigene Verbindung erfordern.

    Standard: \emph{''10''}
\end{description}


\subsection{Zugriffstabelle}

\begin{description}
\config{POSTGRESQL\_HOST\_N}{POSTGRESQL\_HOST\_N}{POSTGRESQLHOSTN}
    Anzahl der Eintr"age in der Zugriffstabelle (Host access table).
    "Uber die Zugriffstabelle kann vorgegeben werden, wer von wo auf welche
    Datenbank zugreifen darf und welches Anmeldeverfahren dabei zum
    Einsatz kommt. Siehe hierzu auch ''PostgreSQL und Sicherheit''

    Beispiel: \emph{''2''}

\config{POSTGRESQL\_HOST\_x\_TYPE}{POSTGRESQL\_HOST\_x\_TYPE}{POSTGRESQLHOSTxTYPE}
    Legt fest, ob hiermit ein lokaler Zugriff "uber einen Unix-Domain-Socket
    (local) oder ein Netzwerkzugriff "uber TCP/IP (host) beschrieben werden
    soll.

    G"ultige Werte: \emph{''local'', ''host''}

\config{POSTGRESQL\_HOST\_x\_NETWORK}{POSTGRESQL\_HOST\_x\_NETWORK}{POSTGRESQLHOSTxNETWORK}
    Ist nur dann anzugeben, wenn ein Netzwerkzugriff beschrieben werden soll.
    Hier wird angegeben, aus welchem Adressbereich (Quelladresse) ein Rechner
    kommen darf, damit dieser Eintrag f"ur ihn zutrifft.
    Der Adressbereich wird in der kombinierten Schreibweise aus IP-Adresse/
    Subnetz angegeben.

    Beispiel: \\
    \emph{''192.168.0.0/16''}  =  Alle Adressen 192.168.x.x \\
    \emph{''192.168.56.3/0''}  =  Nur der Rechner 192.168.56.3

\config{POSTGRESQL\_HOST\_x\_USERAUTH}{POSTGRESQL\_HOST\_x\_USERAUTH}{POSTGRESQLHOSTxUSERAUTH}
    Hier wird festgelegt, wie sich der Datenbank\-anwender bzw. das Client-
    Programm an dem Datenbankserver anzumelden hat. Dazu gibt es eine Reihe
    unterschiedlicher Verfahren:
    \emph{''trust''}:    Der Client ben"otigt kein Kennwort - ihm wird immer vertraut.\\
    \emph{''reject''}:   Der Client darf sich nicht anmelden.\\
    \emph{''md5''}:      Der Client und Server tauschen eine md5 Checksumme aus (empfohlen).\\
    \emph{''crypt''}:    Der Client schickt sein Kennwort verschl"usselt an den Server.\\
    \emph{''password''}: Der Client schickt sein Kennwort unverschlusselt.\\
    \emph{''krb4''}:     Das Kerberos 4 Anmeldeverfahren wird verwendet.\\
    \emph{''krb5''}:     Das Kerberos 5 Anmeldeverfahren wird verwendet.\\
    \emph{''ident''}:    Die Anmeldung erfolgt "uber Ident.\\
    \emph{''pam''}:      Die Anmeldung erfolgt "uber PAM.\\
    Siehe hierzu auch ''PostgreSQL und Sicherheit''

\config{POSTGRESQL\_HOST\_x\_DATABASE}{POSTGRESQL\_HOST\_x\_DATABASE}{POSTGRESQLHOSTxDATABASE}
    Gibt an, f"ur welche Datenbank dieser Eintrag in der Zugriffstabelle gilt.
    Mit ''all'' werden alle Datenbanken zugleich angegeben.

    Beispiel: \emph{''all''}

\config{POSTGRESQL\_HOST\_x\_USER}{POSTGRESQL\_HOST\_x\_USER}{POSTGRESQLHOSTxUSER}
    Gibt an, f"ur welchen Datenbankanwender dieser Eintrag in der Zugriffs-
    tabelle g"ultig ist. Mit ''all'' werden alle bekannten Anwender zugleich
    angegeben.

    Beispiel: \emph{''all''}
\end{description}


\subsection{Leistung und Resourcen-Verteilung}

\begin{description}
\config{POSTGRESQL\_AUTOVACUUM}{POSTGRESQL\_AUTOVACUUM}{POSTGRESQLAUTOVACUUM}
    Mit der Zeit kann es bei Datenbanken zu einer gewissen Fragmentierung
    kommen, die zum Teil zu sp"urbaren Einbr"uchen in der Leistungsf"ahigkeit
    des Servers f"uhren kann. Darum empfiehlt es sich bei PostgreSQL
    in regelm"assigen Abst"anden das SQL-Kommando ''VACUUM FULL'' an den
    Server zu senden.
    Alternativ dazu kann ein Dienst gestartet werden, der sog. Autovacuum-
    Dienst, der den Zustand der Datenbank "uberwacht und die Tabellen ggf.
    selbstst"andig optimiert.

    G"ultige Werte: \emph{''yes'', ''no''}

\config{POSTGRESQL\_MEMORY\_LAYOUT}{POSTGRESQL\_MEMORY\_LAYOUT}{POSTGRESQLMEMORYLAYOUT}
    Wie bei den meisten Datenbankservern hat auch bei PostgreSQL die Zuteilung
    von Arbeitsspeicher einen grossen Einfluss auf die Arbeitsgeschwindigkeit
    des Dienstes. Zugleich sollte die Zuteilung so erfolgen, dass auch f"ur
    die "ubrigen Dienste dieses Systems ausreichend Speicher zur Verf"ugung steht.

    Damit die Konfiguration nicht unn"otig verkompliziert wird, stehen
    seitens der eisfair-Konfiguration vier verschiedene Speicherprofile
    zur Verf"ugung. Abh"angig vom vorhandenen Arbeitsspeicher kann nach
    der folgenden Tabelle daraus gew"ahlt werden:

    \emph{''small''}:   F"ur Systeme mit bis zu 512MB RAM.\\
    \emph{''medium''}:  F"ur System mit 512MB bis 2GB RAM.\\
    \emph{''large''}:   F"ur Systeme mit 2GB bis 4GB RAM.\\
    \emph{''huge''}:    F"ur Systeme ab 4GB RAM.

    Innerhalb der Serverkonfiguration wird der Speicher anschliessend wie
    folgt aufgeteilt:

    \begin{verbatim}
            shared_buffers  temp_buffers  work_mem   maintenance_work_mem
    small   16MB            4MB           1MB        8MB
    medium  128MB           8MB           4MB        64MB
    large   256MB           16MB          8MB        128MB
    huge    512MB           32MB          16MB       256MB
    \end{verbatim}

    Beispiel: \emph{''medium''}

\config{POSTGRESQL\_WRITE\_MODE}{POSTGRESQL\_WRITE\_MODE}{POSTGRESQLWRITEMODE}
    Auch die Art und Weise, wie und wann die Daten auf die Festplatte
    geschrieben werden, hat einigen Einfluss auf die Arbeitsgeschwindigkeit
    des Servers. Der Anwender hat dabei die Wahl innerhalb von vier Stufen
    einen Kompromiss zwischen einer sehr sicheren, aber langsamen oder
    einer sehr schnellen, daf"ur aber unsicheren Arbeitsweise zu w"ahlen.
    Die Sicherheit bezieht sich dabei auf die Konsistenz der Datenbanken
    im Fall eines pl"otzlichen unerwarteten Stromausfalls.

    \emph{''secure''} = sehr sicher aber langsam.\\
    \emph{''normal''} = im Zweifelsfall die beste Wahl.\\
    \emph{''fast''} = schnelle Betriebsart. Gefahr von gerinf"ugigem Datenverlust.\\
    \emph{''nosync''} = sehr schnell. Die Datenbanken k"onnen jedoch korrumpieren.

    Die Einstellung \emph{''nosync''} ist nur in speziellen Anwendungsf"allen sinnvoll.

    \begin{verbatim}
             fsync  synchronous_commit  commit_delay
    secure   yes    on                  0
    normal   yes    on                  100
    fast     yes    off                 1000
    nosync   no     off                 0
    \end{verbatim}

    Beispiel: \emph{''normal''}
\end{description}


\subsection{Protokoll-Einstellungen}

\begin{description}
\config{POSTGRESQL\_LOG\_SETTINGS}{POSTGRESQL\_LOG\_SETTINGS}{POSTGRESQLLOGSETTINGS}
    Wird diese Option auf ''yes'' gestellt, dann kann mit den folgenden
    Optionen die Art und Weise beeinflusst werden, wie PostgreSQL Protokollausgaben
    durchf"uhrt. Anderenfalls werden die jeweiligen Standardwerte
    verwendet.

    Standard: \emph{''no''}

\config{POSTGRESQL\_CLIENT\_LOG\_LEVEL}{POSTGRESQL\_CLIENT\_LOG\_LEVEL}{POSTGRESQLCLIENTLOGLEVEL}
    Steuert in welcher Detailtiefe Nachrichten an den Client gesendet werden.
    G"ultige Werte sind: DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, LOG,
    NOTICE, WARNING, ERROR, FATAL und PANIC. Jede Detailebene enth"alt
    alle Ebenen die ihr folgen. Die Werte sind in absteigender Folge dargestellt.
    Je weiter hinten ein Wert ausgew"ahlt wird, je weniger Nachrichten
    werden gesendet. Es ist zudem zu beachten, dass LOG hier einen
    anderen Stellenwert hat, als unter SERVER\_LOG\_LEVEL.

    Standard: \emph{''notice''}

\config{POSTGRESQL\_SERVER\_LOG\_LEVEL}{POSTGRESQL\_SERVER\_LOG\_LEVEL}{POSTGRESQLSERVERLOGLEVEL}
    Steuert in welcher Detailtiefe Nachrichten in das Server-Logfile geschrieben
    werden.
    G"ultige Werte sind: DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, NOTICE,
    WARNING, ERROR, LOG, FATAL und PANIC. Jede Detailebene enth"alt
    alle Ebenen die ihr folgen. Die Werte sind in absteigender Folge dargestellt.
    Je weiter hinten ein Wert ausgew"ahlt wird, je weniger Nachrichten
    werden geschrieben. Es ist zudem zu beachten, dass LOG hier einen
    anderen Stellenwert hat, als unter CLIENT\_LOG\_LEVEL.

    Standard: \emph{''notice''}

\config{POSTGRESQL\_LOG\_VERBOSE}{POSTGRESQL\_LOG\_VERBOSE}{POSTGRESQLLOGVERBOSE}
    Steuert ob Eintr"age im Server-Logfile ausf"uhrlich oder normal erfolgen
    sollen.

    Standard: \emph{''no''}

\config{POSTGRESQL\_LOG\_STATEMENTS}{POSTGRESQL\_LOG\_STATEMENTS}{POSTGRESQLLOGSTATEMENTS}
    Hiermit k"onnen SQL-Statements im Server-Logfile mitgeschrieben werden.

    Standard: \emph{''no''}

\end{description}


\subsection{Sicherung}

\begin{description}
\config{POSTGRESQL\_BACKUP\_SCHEDULE}{POSTGRESQL\_BACKUP\_SCHEDULE}{POSTGRESQLBACKUPSCHEDULE}
    Zeitvorgabe f"ur den CRON-Dienst. Hier wird angegeben, wann die
    automatische Sicherung durchgef"uhrt werden soll. Die 5 Werte stehen
    f"ur: Minute, Stunde, Tag, Monat, Wochentag.

    Beispiel:  \\
    \emph{''30 0 * * *''}  -->  t"aglich um 0:30 Uhr \\
    \emph{''0  1 */2 * *''} --> Jeden zweiten Tag um 1:00 Uhr

\config{POSTGRESQL\_BACKUP\_TARGET}{POSTGRESQL\_BACKUP\_TARGET}{POSTGRESQLBACKUPTARGET}
    Das Verzeichnis, in das die Sicherungsdateien abgelegt werden sollen.

    Standard: \emph{''/var/lib/pgsql\_backup''}

\config{POSTGRESQL\_BACKUP\_MOUNT}{POSTGRESQL\_BACKUP\_MOUNT}{POSTGRESQLBACKUPMOUNT}
    Bevor die Sicherung beginnt, wird das hier angegebene Kommando ausgef"uhrt.
    Dies kann verwendet werden, um beispielsweise das Sicherungsmedium
    in das Dateisystem einzubinden.
    Soll kein Befehl ausgef"uhrt werden bleibt das Feld leer.

    Beispiel: \emph{''mount -t udffs /dev/sr0 /mnt''}

\config{POSTGRESQL\_BACKUP\_NOTIFY}{POSTGRESQL\_BACKUP\_NOTIFY}{POSTGRESQLBACKUPNOTIFY}
    Wird hier eine e-mail Adresse angegeben, erfolgt im Falle von Fehlern
    bei der Datensicherung eine Benachrichtigung an den hier angegebenen
    Empf"anger. Soll keine Benachrichtigung erfolgen bleibt das feld leer.
    Hinweis: Die Benachrichtigung funktioniert nur dann, wenn das E-mail
    Paket installiert ist.

    Beispiel: \emph{''dbadmin@localhost''}

\config{POSTGRESQL\_BACKUP\_CLUSTER}{POSTGRESQL\_BACKUP\_CLUSTER}{POSTGRESQLBACKUPCLUSTER}
    Hiermit wird vorgegeben, ob im Zuge einer Datensicherung der gesamte
    Datenbank-Cluster in einem einzigen Sicherungsarchiv ausgelagert werden
    soll. Neben den einzelnen Datenbanken werden damit unter anderem auch
    Anwender und Gruppen gesichert.

\config{POSTGRESQL\_BACKUP\_CLUSTER\_USER}{POSTGRESQL\_BACKUP\_CLUSTER\_USER}{POSTGRESQLBACKUPCLUSTERUSER}
    Name des Datenbankanwenders, der "uber ausreichende Zugriffsrechte f"ur die
    Sicherung des gesamten Datenbank-Clusters verf"ugt. Da der user ''postgres''
    i.d.R. immer existiert, ist dieser meistens eine gute Wahl.

    Beispiel: \emph{''postgres''}

\config{POSTGRESQL\_BACKUP\_CLUSTER\_MAX}{POSTGRESQL\_BACKUP\_CLUSTER\_MAX}{POSTGRESQLBACKUPCLUSTERMAX}
    Gibt an, wie viele Kopien der Sicherungsdatei des Datenbank-Clusters
    aufgehoben werden sollen.

\config{POSTGRESQL\_BACKUP\_DATABASES}{POSTGRESQL\_BACKUP\_DATABASES}POSTGRESQLBACKUPDATABASES
    Zus"atzlich (oder alternativ) k"onnen neben der Sicherung des gesamten
    Datenbank-Clusters auch individuelle Datenbanken in separaten Archiven
    gesichert werden. Dies bietet den Vorteil, dass diese damit auch
    einzeln wiederhergestellt oder migriert werden k"onnen.
    Diese Option aktiviert die Sicherung von individuellen Datenbanken.

\config{POSTGRESQL\_BACKUP\_N}{POSTGRESQL\_BACKUP\_N}{POSTGRESQLBACKUPN}
    Anzahl Datenbanken, die gesichert werden sollen. Jede der angegebenen
    Datenbanken wird in einer Datei mit folgendem Namen abgelegt:

    \emph{datenbank\_name}-\emph{datum\_iso}-\emph{zeit}.backup

    Beispiel: \emph{''2''}

\config{POSTGRESQL\_BACKUP\_x\_DBNAME}{POSTGRESQL\_BACKUP\_x\_DBNAME}{POSTGRESQLBACKUPxDBNAME}
    Name der Datenbank, die gesichert werden soll.

	Beispiel: \emph{''mydb''}

\config{POSTGRESQL\_BACKUP\_x\_USER}{POSTGRESQL\_BACKUP\_x\_USER}{POSTGRESQLBACKUPxUSER}
    Name des Datenbankanwenders, der ausreichende Zugriffsrechte f"ur die
    Sicherung der angegebenen Datenbank hat. Da der user ''postgres''
    i.d.R. immer existiert, ist dieser meistens eine gute Wahl.

    Beispiel: \emph{''postgres''}

\config{POSTGRESQL\_BACKUP\_x\_MAX}{POSTGRESQL\_BACKUP\_x\_MAX}{POSTGRESQLBACKUPxMAX}
    Gibt an, wieviele Kopien der Sicherungsdatei aufgehoben werden sollen.

    Beispiel: \emph{''7''}


\end{description}


\section{Das Paketmen"u}

\subsection{PostgreSQL Administration}

\begin{itemize}
\item View documentation\\
  Dokumentation zum Paket PostgreSQL auf eisfair anzeigen.
\item Edit configuration\\
  Konfiguration des Datenbankservers "uber die eisfair-Konfigurationsebene bearbeiten.
\item Advanced configuration file handling\\
  Versionsverwaltung der Konfiguration des Datenbankservers.
\item Start PostgreSQL server\\
  Den Datenbankdienst starten.
\item Stop PostgreSQL server\\
  Den Datenbankdienst beenden.
\item Show status and connects\\
  Den aktuellen Status des Servers und die aktiven Client Verbindungen zu diesem anzeigen.
\item PostgreSQL tools\\
  Untermen"u: Eine Sammlung von Werkzeugen zur Verwaltung von Datenbanken.
\end{itemize}


\subsection{PostgreSQL Tools}

\begin{itemize}
\item Database Administrator\\
  Start des curses basierten Programms f"ur die Verwaltung von Datenbanken,
  Anmelderollen und Gruppenrollen. Siehe Kapitel ''PostgreSQL Administrator''
  f"ur weitere Einzelheiten.
\item Database Administrator (remote)\\
  Start des curses basierten Programms f"ur die Verwaltung von Datenbanken,
  Anmelderollen und Gruppenrollen. Siehe Kapitel ''PostgreSQL Administrator''
  f"ur weitere Einzelheiten. Mit der ''remote''-Option ist ein Zugriff "uber
  das Netzwerk auf entfernte Datenbankserver m"oglich.
\item Backup and restore\\
  Untermen"u: Hier k"onnen Datenbanken gesichert und wiederhergestellt
  werden.
\item Set local password\\
  Hier kann ein Kennwort f"ur den loklen Zugriff von administrativen Diensten
  (z. B. Sicherung, Autovacuum ...) festgelegt werden.
\item Start SQL interpreter\\
  Start eines Programms zur direkten Eingabe von SQL-Befehlen.
\end{itemize}


\subsection{PostgreSQL backup and restore}

\begin{itemize}
\item Backup database cluster\\
  Diese Funktion erlaubt es, alle Daten eines Servers vollst"andig zu sichern.
  Eine vollst"andige Sicherung schließt auch globale Daten wie Benutzer und
  Gruppen mit ein.\\
  Ein m"oglicher Anwendungsfall ist beispielsweise die Migration der Daten
  eines Servers auf eine neuere PostgreSQL Version.
\item Restore database cluster\\
  Wiederherstellung aller Daten eines Servers aus einer zuvor erstellten
  Sicherungsdatei.
\item Backup database\\
  Hiermit kann eine einzelne Datenbank in eine Datei im Sicherungsverzeichnis
  manuell gesichert werden.
\item Restore database\\
  Hier wird die Wiederherstellung einer Datenbank aus einer Sicherung vorgenommen.
\item List backup files\\
  Auflistung aller Sicherungsdateien im Sicherungsverzeichnis in chronologische
  Reihenfolge.
\end{itemize}


\section{PostgreSQL und Sicherheit}
Um die Installation zu erleichtern, ist die Tabelle f"ur den Zugriff auf den
Datenbankserver so voreingestellt, dass vom lokalen Rechner aus keine
Kennworteingabe erforderlich ist. F"ur den Betrieb im produktiven oder
sicherheitskritischen Umfeld ist diese Voreinstellung jedoch nicht geeignet,
da jeder Anwender, der sich auf dem Server anmelden darf, als User ''postgres''
eine Client-Verbindung zum Server herstellen kann und damit vollen
administrativen Zugriff auf die Datenbanken hat.

Um diese Sicherheitsl"ucke zu schlie"sen sind folgende Schritte auszuf"uhren:

\begin{description}
\item Schritt 1: Kennwort f"ur den User ''postgres'' festlegen\\
   "Uber den SQL-interpreter wird dazu das Kommando ALTER USER... wie folgt
   abgesetzt, wobei ''password'' gegen ein beliebiges Kennwort zu ersetzen
   ist:

   \emph{ALTER USER ''postgres'' WITH PASSWORD 'password';}

   Der Server best"atigt den Befehl mit \emph{''ALTER USER''}.

\item Schritt 2: Lokales Kennwort festlegen\\
   Damit administrative Dienst, wie die Sicherung oder der Autovacuum-Dienst
   auch in Zukunft mit dem Server ohne Kennworteingabe kommunizieren k"onnen,
   wird das im Schritt 1 angegebene Kennwort im Heimatverzeichnis des
   Unix-Anwenders ''root'' gespeichert. Dazu sollte man ungedingt als Anwender
   ''root'' oder ''eis'' an dem Server angemeldet sein.
   Zum Festlegen des lokalen Kennworts dient der Men"upunkt ''Set password for
   local access''.

\item Schritt 3: Zugriff einschr"anken\\
   In der Konfiguration werden im Abschnitt ''Host access table'' die Eintr"age
   f"ur den lokalen Zugriff von ''trust'' auf z. B. ''md5'' gesetzt, wodurch eine
   Authentifizierung des Clients erzwungen wird.
\end{description}



\section{Methoden Benutzerauthentifizierung}

Die Anmeldung am Datenbankserver kann auf unterschiedliche Art erfolgen.
Welche Methode verwendet wird, legt dabei die Zugriffstabelle in der
Konfiguration fest. Generell gilt, dass das Anmeldekonto auf dem
Server als Login-Rolle existieren muss. Lediglich die "Uberpr"ufung des
Kennworts erfolgt dann auf unterschiedliche Weise. Dabei ist zu unterscheiden
zwischen den Methoden, die das Kennwort des Benutzers gegen das
Kennwort der Login-Rolle authentifizieren (md5, password, crypt ...) und den
Methoden, die einen externen Passwort-Server dazu verwenden (pam, kerberos).

Die empfohlene Methode ist md5, da hier lediglich ein Hash-Wert, nicht aber
das Kennwort selbst ausgetauscht wird. Als Kennwort gilt das Kennwort der
Login-Rolle.

\subsection{Ident Authentifizierung}
Bei der Ident-Authentifizierung wird kein Kennwort "uberpr"uft. Es wird lediglich
ein auf dem Client laufender Ident-Daemon angefragt, unter welchem Benutzernamen
die Verbindung initiiert wurde. Dieser User sollte dann auf dem
Datenbankserver unter dem gleichen Namen eine entsprechende Login-Rolle
besitzen.

\subsection{PAM Authentifizierung}
PAM ist eine sehr flexible M"oglichkeit der Benutzerauthentifikation, da hier
eine zentrale Abstraktionsschicht (die PAM-Konfiguration) festlegt, wie
die Authentifizierung erfolgen soll. So kann beispielsweise gegen die lokalen
Systemdateien (/etc/passwd, /etc/shadow, /etc/group) ebenso authentifiziert
werden, wie "uber einen LDAP-Server. Allerdings ist dazu etwas Handarbeit
n"otig:

Bei der Anmeldung "uber die Systemdateien (/etc/passwd,/etc/shadow,/etc/group)
wird unter /etc/pam.d eine Datei mit dem Namen ''postgresql'' und dem folgenden
Inhalt angelegt:

\begin{verbatim}
#%PAM-1.0
auth       required     pam_unix.so
account    required     pam_unix.so
session    required     pam_unix.so
\end{verbatim}

Desweiteren ben"otigt der Unix-Account ''postgres'', unter dessen User-ID der
Datenbankserver l"auft, einen Lesezugriff auf die Datei /etc/shadow, die
normalerweise nur von ''root'' gelesen weden kann. Die wohl eleganteste
Methode dazu ist, eine Gruppe f"ur den Lesezugriff einzurichten und den
User ''postgres'' darin aufzunehmen. Dann wird die Gruppenzugeh"origkeit der
Datei /etc/shadow ge"andert und das Lesebit f"ur die Gruppe gesetzt. Beispiel:

Gruppe: shadowreaders
Mitglied: postgres

   chown root:shadowreaders /etc/shadow
   chmod g+r /etc/shadow

Quelle: http://itc.musc.edu/wiki/PostgreSQL
Hier findet sich auch eine Anleitung f"ur LDAP "uber PAM.

\section{Sicherung und Wiederherstellung}
Es kann entwerder manuell "uber das Men"u oder automatisch per CRON-Daemon
eine Sicherung von Datenbanken vorgenommen werden. Im Falle der manuellen
Sicherung wird dazu der Men"upunkt ''Backup database'' im Untermen"u ''PostgreSQL
Tools'' gew"ahlt und anschlie"send die Datenbank angegeben, die gesichert
werden soll. Die Sicherungsdatei wird in dem Verzeichnis abgelegt,
das in der Konfiguration f"ur POSTGRESQL\_BACKUP\_TARGET angegeben wurde. Die
Standardeinstellung ist '/var/lib/pgsql\_backup'.

Im Falle der automatischen Sicherung per CRON-Daemon wird in der Paketkonfiguration
angegeben, welche Datenbanken zu sichern sind, wieviele Kopien der Sicherungsdatei
aufbewahrt werden sollen und wann die Sicherung stattfinden soll. Zudem kann eine
E-mail-Adresse angegeben werden, an die im Fehlerfall eine Nachricht verschickt wird.

Der Dateiname wird bei beiden Sicherungsvarianten wie folgt zusammengesetzt:

    \emph{datenbank\_name}-\emph{datum\_iso}-\emph{zeit}.backup

Das ISO-Datumsformat: \emph{JJJJ-MM-TT}\\
Zeitformat:           \emph{HHMMSS}

Beispiele:\\
-rw-r--r--  1 root root  4309287 Oct 29 00:31 testdb-2005-10-29-003003.backup\\
-rw-r--r--  1 root root  4309287 Oct 30 00:31 testdb-2005-10-30-003004.backup\\

Zur Wiederherstellung der Daten einer Sicherungsdatei wird zun"achst eine
leere Datenbank, sowie alle erforderlichen Datenbankanwender angelegt.
Anschlie"send kann die Wiederherstellung "uber den Men"upunkt ''Restore database''
vorgenommen werden.

Zuerst erfolgt eine Auswahl einer Datei aus dem unter POSTGRESQL\-\_BACKUP\_TARGET
angegebenen Verzeichnis, dann wird als Ziel der Operation die neu angelegte
Datenbank ausgew"ahlt.

Wie "ublich gilt auch hier: Es ist besser nicht blind der Sicherung zu vertrauen,
sondern die Wiederherstellung der Daten auszuprobieren, bevor es zum GAU kommt.


\section{PostgreSQL Administrator}
Die skriptbasierte Datenbankverwaltung wurde durch ein curses-basiertes
Administrationsprogramm ersetzt, welches einfacher zu bedienen und in Zukunft
leichter zu erweitern ist.

Nach dem Programmstart wird ein Anmeldedialog gezeigt, "uber den man sich
am Datenbankserver anmelden kann. Standardm"a"sig gibt es keine Zugriffsbegrenzung
f"ur den lokalen Zugriff ("uber Unix-Sockets), sodass der Dialog
einfach mit ENTER best"atigt werden kann. Gleiches gilt wenn "uber ''Set local
password'' ein Kennwort f"ur den jeweiligen Anwender hinterlegt wurde.

Das Programm hat ein dreigeteiltes Layout: Auf der linken Seite ist ein
Auswahlmen"u angebracht, "uber das die einzelnen Programmbereiche erreicht
werden. Im rechten oberen Bereich befindet sich die "Ubersichtsliste der
Datenbankobjekte, die im jeweiligen Programmbereich bearbeitet werden. Im
rechten unteren Bereich ist ein Hilfefenster angebracht, das spezifische
Hilfe zum jeweiligen Programmbereich enth"alt.

Der Eingabefocus l"a"st sich mit der TAB-Taste im gesamten Programm verschieben
und die im jeweiligen Programmbereich aktiven Funktionen sind "uber Funktionstasten
direkt zu erreichen. Siehe dazu auch die Hinweise in der Statusleiste
des Programms am unteren Rand.

Damit das Programm auch ohne Funktionstasten zu bedienen ist, sind alle
Funktionen zus"atzlich "uber ein Men"u erreichbar. Dazu bewegt man den Eingabecursor
auf die "Ubersichtsliste und dr"uckt dort die ENTER-Taste. Verlassen kann man
das Programm "uber die F10 Taste oder mit Hilfe der Men"us.


\section{PostgreSQL Module (Information f"ur Paketentwickler)}
Um f"ur zuk"unftige Erweiterungen offen zu sein, sieht PostgreSQL in seiner
Men"ustruktur eine Schnittstelle vor, die von Erweiterungspaketen verwendet
werden kann. Dazu muss lediglich im Men"uverzeichnis unter ''/var/install/menu''
eine Datei abgelegt werden, die der folgenden Namenskonvention entspricht:

    setup.services.postgresql.modules.<paketname>.menu

Diese Datei wird beim "Offnen dynamisch in das Modulmen"u eingebunden. Dazu
sollten aber in der Men"udatei unbedingt die Tags <package> und <title>
definiert sein.

Der Vorteil der dynamischen Bindung ist, dass Erweiterungsmodule zur Lauf-
zeit ermittelt werden und bei einem Update des Datenbankservers nicht mehr
verloren gehen k"onnen.

In Zukunft wird es weitere Schnittstellen geben, die z. B. Erweiterungen
zum PostgreSQL Administrator anbieten. Da hier jedoch die Anforderungen noch
nicht bekannt sind, werden diese Schnittstellen erst bei Bedarf implementiert.

\jump{DATABASECOMMON}{Zur"uck zu: Die Datenbanken}
