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.
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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
|
|
|