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

| PostgreSQL | Autor Formatierung GFDL

#### 1 Einleitung

Datenbanken Managementsysteme helfen, komplexe Aufgaben einfach zu lösen, da etliche Teilaufgaben von diesen erledigt werden.

PostgreSQL ist ein relationales Datenbank Managementsystem (RDBMS). Es ist OpenSource und verfügt über Leistungsmerkmale, die es für den Einsatz in Produktionsumgebungen qualifizieren. PostgreSQL gilt wohl als das zuverlässigste und fortschrittlichste OpenSource DBMS.

#### 1.1 Über dieses Dokument

Dieses Dokument kann nur einen kleinen Überblick über PostgreSQL geben. Viele Themen werden nur angerissen oder überhaupt nicht erwähnt. Da PostgreSQL sehr komplex ist, und ständig weiterentwickelt wird, kann es ebenfalls sein, dass etliche der hier genannte Informationen nicht mehr aktuell sind. Trotz aller Sorgfalt kann es dennoch sein, dass einige der Informationen aus diesem Dokument fehlerhaft sind.

Es ist versucht worden, dieses Dokument so zu schreiben, dass man nur wenig Datenbankvorwissen benötigt. Grundlegende Linux-Administrationskenntnisse werden benötigt. So sollte bekannt sein, wie man Softwarepakete im Allgemeinen installiert.

Dieser Text beschäftigt sich hauptsächlich mit den Besonderheiten von PostgreSQL. Um effektiv mit einem Datenbanksystem arbeiten zu können, sollten allgemeine Kenntnisse von relationalen Datenbanken vorhanden sein (Relationen, Normalformen, Datenmodelle, SQL usw.).

Hier wird auch nicht SQL erklärt. Interessierte finden in einer PostgreSQL Referenz oder in einem SQL Buch Informationen. Es wird jedoch versucht, auf PostgreSQL Eigenheiten einzugehen. Das SQL ist nah am Standard SQL92 und realisiert SQL99 teilweise.

Dank gebührt Mirko Zeibig für die fachliche Kontrolle und Korrektur, insbesondere vielen Anpassungen und Aktualisierungen für die Version 7.3. Der Autor Steffen Dettmer ( steffen@dett.de) freut sich natürlich über Kommentare und Anregungen zu diesem Text.

#### 1.2 Datenbanken allgemein

Datenbanken sind nicht einfach nur Daten in Tabellen. Vielmehr bestehen sie neben den eigentlichen Daten aus Zugriffsbedingungen und -berechtigungen, Benutzern, Regeln, Funktionen und Weiterem. Sie dienen dazu, umfangreiche Datenmengen zu speichern und wiederzugewinnen und dies mehreren Anwendungen gleichzeitig zu ermöglichen.

Es geht hier also nicht einfach nur um Datenspeicher, sondern auch um das Knüpfen von Regeln an Daten. So kann man beispielsweise sicherstellen, dass nur bestimmte Benutzer diese Daten lesen oder ändern können. Man kann sicherstellen, dass die Daten Konsistenzbedingungen genügen; beispielsweise, dass gespeicherte Adressen entweder gar keine oder eine fünfstellige Postleitzahl haben, die nur aus Ziffern besteht.

Datenbanken werden von sogenannten Datenbank Mangementsystemen (DBMS) verwaltet. Nur das DBMS selbst kann direkt auf die Datenbanken zugreifen. Anwendungen greifen immer über das DBMS auf diese zu. Das DBMS prüft und kontrolliert dabei und führt komplexe Operationen im Auftrag von Anwendungen aus.

Solche Systeme werden eingesetzt, um Datenredundanz zu verringern. In der Regel wird jedes Datum nur einmal in der Datenbank gespeichert. Verschiedene Repräsentationen werden vom DBMS bei Bedarf bereitgestellt, ohne diese Daten etwa zu kopieren.

Wie bereits angedeutet, werden sie eingesetzt, um die Datenintegrität (Konsistenz) zu gewährleisten. Bei Veränderungen werden beispielsweise notwendige Folgeänderungen automatisch durchgeführt, das Eintragen von inkonsistenten Daten wird verhindert. Des weiteren werden die Daten vor unberechtigtem Zugriff geschützt. Auch sind die Daten unabhängiger von den Anwendungsprogrammen; es spielt keine Rolle, wie diese tatsächlich gespeichert werden. Wird hier etwas geändert, so müssen die Anwendungen nicht alle angepasst werden.

#### 1.3 Schnittstellen und Clients

Schnittstellen zur Datenbank sind immer Schnittstellen zum Datenbank Managementsystem. Da dies immer so ist, spricht man auch einfach von Datenbankschnittstellen.

Anwendungen kommunizieren über Schnittstellen mit dem DBMS. Diese Schnittstellen sind fast immer in mehrere Ebenen zu unterteilen. Die meisten Schnittstellen sind netzwerkfähig, üblicherweise verwenden DBMS TCP/IP. Darüber setzen Anwendungen Befehle oder Kommandos in Datenbanksprachen ab. Die sicherlich bekannteste Datenbanksprache ist SQL (structured query language). Natürlich verfügt jede Datenbank über eine eigene Schnittstelle, dass heißt, der genaue Aufbau der Kommandos und vor allem die Übertragung über das Netzwerk unterscheiden sich erheblich - selbst bei der Verwendung von SQL.

DBMS verfügen über Dienstprogramme, die über solche Schnittstellen mit der Datenbank kommunizieren. Diese Dienstprogramme sind für bestimmte Aufgaben unumgänglich, beispielsweise für die erste Einrichtung. Oft bieten diese Zusatzfunktionen, die man für die Administration benötigt, beispielsweise das Anlegen von Benutzern. Zusätzlich bieten die meisten DBMS solche Funktionen auch über SQL an: die Kommandos sind so definiert, dass sie den SQL Standards genügen bzw. diesen nicht widersprechen. Man spricht hier von SQL-Erweiterungen. Die meisten Datenbanken verfügen über etliche Erweiterungen, die man nach Möglichkeit jedoch sparsam einsetzen sollte, um sich spätere Migrationsprobleme zu ersparen.

Damit Anwendungen nicht so DBMS abhängig sind, gibt es eine weitere Ebene der Schnittstellen, die Programmier- oder Applikationsebene. Das ist in der Regel eine Reihe von Funktionen, die aus einer Programmiersprache aufgerufen werden können. Die wohl bekanntesten Schnittstellen sind hier ODBC und JDBC. ODBC, OpenDataBaseConnectivity, beschreibt, wie Programme mit DBMS kommunizieren können. ODBC selbst ist in etwa eine Funktionsbibliothek, die SQL im Prinzip voraussetzt. ODBC regelt aber auch den Verbindungsaufbau zu einem DBMS, Benutzerauthentifizierung und anderes. JDBC ist das Standard-Verfahren, Java-Anwendungen mit DBMS Unterstützung zu versehen.

Auch wenn in der Theorie die Schnittstellen ODBC und JDBC suggerieren, dass man das DBMS problemlos transparent wechseln kann, ist das in der Praxis selten so. In der Praxis sind diese Standards nämlich selten vollständig implementiert, und es gibt etliche Punkte, wo sie nicht eindeutig sind. Gerade über ODBC ist es zudem äußerst umständlich, wirklich datenbankunabhängig zu arbeiten, so dass sich meistens einige ärgerliche Abhängigkeiten einschleichen.

Beispiele für Anwendungen beziehungsweise Clients sind Datenbank Frontends. Die wohl beliebtesten für PostgreSQL sind psql (eine textbasierter, interaktiver SQL Interpreter), pgaccess (ein graphisches Frontend, mit dem man gut Tabellen, Views, Reports und vieles mehr anlegen und bearbeiten kann) und phpPgAdmin, einem sehr flexiblen Webfrontend, dass man sich unbedingt anschauen sollte, wenn man Webfrontends mag.

#### 1.4 PostgreSQL

PostgreSQL ist ein relationales DBMS (RDBMS). Als Hauptsprache findet SQL Verwendung (natürlich ebenfalls mit etlichen Erweiterungen). Wie viele andere Datenbanken unterstützt auch PostgreSQL nicht den vollständigen SQL Standard. Die Funktionen von PostgreSQL sind aber sehr umfangreich, so dass man in der Praxis selten Beispiele findet, wo sich eine Anforderung nicht realisieren läßt.

PostgreSQL ist ein Nachfolger von INGRES und POSTGRES, ist jedoch in vielen Punkten stark erweitert und verbessert worden. Die Entwickler unternehmen große Anstrengungen, um möglichst standardkonform zu sein. Das DBMS ist in weiten Teilen SQL92 kompatibel und unterstützt einiges aus SQL99. Es ist unter einer BSD-Style Lizenz verfügbar.

Auch wenn bekannt ist, dass es mit großen Datenmengen umgehen kann (es sind Installationen mit mehr als 60 GB Datenbasis bekannt), eignet es sich wohl weniger für Enterprise-Class Anwendungen. Hier sollten professionelle Datenbanken wie IBM DB2 erwogen werden.

Bei einfachen Datenbankanwendungen, beispielsweise CGI basierten Webanwendungen, die ein paar Adressen speichern, wird von vielen ein einfacheres, schnelleres DBMS vorgezogen: mySQL. mySQL gilt als schnell installiert und einfach bedienbar.

Natürlich ist PostgreSQL auch in kleinen Systemen eine sehr gute Wahl, und da kleine Systeme zum Wachsen neigen, ergibt sich hier schnell ein weiterer Vorteil. PostgreSQL wartet dafür auch mit etlichen high-end Datenbankfunktionen auf.

#### 1.5 Verfügbarkeit

PostgreSQL, JDBC und ODBC sind für verschiedene Plattformen verfügbar, beispielsweise für Linux, BSD und Windows. PostgreSQL kann über unixODBC und Perl::DBI verwendet werden, als Programmierplattformen sind C/C++, Java, PHP, Perl, TCL und viele andere bekannt.

Auch Microsoft Windows Benutzer können Vorteile ziehen, so kann MS Access beispielsweise problemlos über ODBC auf das DBMS zugreifen. Damit kann man die Datenbank gut in die MS Office Anwendungen einbetten.

#### 1.6 Vorteile und Funktionen

Die ISO Transaktionsmodelle read committed und serializable werden unterstützt. Umfangreiche Möglichkeiten für Benutzerberechtigungen und Datenbankregeln stehen zur Verfügung. JDBC und ODBC Treiber sind für verschiedene Plattformen verfügbar, beispielsweise für Linux, BSD und Windows. Die Software wird von einer stabilen, erfahrenen und weltweit arbeitenden Gruppe gepflegt und weiterentwickelt.

PostgreSQL gilt nach 16 jähriger Entwicklungszeit als sehr stabil und zuverlässig. "Advocacy" schreibt hierzu:

> Im Gegensatz zu Benutzern vieler kommerzieller Datenbanksysteme ist es bei Unternehmen, die PostgreSQL einsetzen der Normalfall, dass das Datenbanksystem noch kein einziges Mal abgestürzt ist. Auch nicht bei jahrelangem Einsatz und großem Datenaufkommen. Es läuft einfach.

Wie bereits erwähnt, versuchen die Entwickler, nah an den Standards zu arbeiten. Fast alle von SQL92 und SQL99 spezifizierten Datentypen werden unterstützt, eigene Datentypen können erzeugt werden. Fremdschlüssel, Trigger und Views sind verfügbar. Alle von SQL99 spezifizierten joins sind implementiert. Internationale Zeichentabellen, Unicode und locale gehören ebenso dazu, wie Unterstützung von Unterabfragen (sub queries), GROUP BY, UNION, INTERSECT, LIMIT, LIKE und vollständige POSIX konforme reguläre Ausdrücke, verschiedene Indexverfahren. Das DBMS ist an weiten Teilen erweiterbar. Transaktionen werden unterstützt (ISO read commited und serializable), umfangreiche Sicherheitskonzepte sind realisierbar (Benutzer, SSL/TLS, Algorithmen). Mehrere CPUs können verwendet werden, eben so virtuelle hosts.

Es gibt viele Erfolgsgeschichten über PostgreSQL; im Internet finden sich viele Projekte und Firmen, die erfolgreich aufwendige Systeme mit dieser Datenbank realisiert haben.

#### 1.7 Grenzen von PostgreSQL

PostgreSQL verfügt wohl über keine praxisrelevanten Grenzen mehr. Plant man eine Anwendung, die möglicherweise in die Nähe der im Folgenden angegebenen Werte kommt, sollte man ernsthaft den Einsatz von IBM DB/2 oder anderen Enterprise Class Systemen erwägen.

Maximale Datenbankgröße | unbegrenzt (60 GB Datenbanken existieren)
Maximale Tabellengröße | 64 TB (65536 GB) auf allen Plattformen
Maximale Größe einer Zeile | unbegrenzt
Maximale Größe eines Feldes | 1 GB
Maximale Anzahl von Zeilen in einer Tabelle | unbegrenzt
Maximale Anzahl von Spalten in einer Tabelle | 1600
Maximale Anzahl von Indizes einer Tabelle | unbegrenzt