PostgreSQL

PostgreSQL ( []), oft kurz Postgres genannt, ist ein freies, objektrelationales Datenbankmanagementsystem (ORDBMS). Seine Entwicklung begann in den 1980er Jahren, seit 1997 wird die Software von einer Open-Source-Community weiterentwickelt.

PostgreSQL ist weitgehend konform mit dem SQL-Standard SQL:2011, das heißt, der Großteil der Funktionen ist verfügbar und verhält sich wie definiert. PostgreSQL ist vollständig ACID-konform (inklusive der Data Definition Language) und unterstützt erweiterbare Datentypen, Operatoren, Funktionen und Aggregate. Obwohl sich die Entwicklergemeinde sehr eng an den SQL-Standard hält, gibt es dennoch eine Reihe von PostgreSQL-spezifischen Funktionalitäten, wobei in der Dokumentation bei jeder Eigenschaft ein Hinweis erfolgt, ob dies dem SQL-Standard entspricht, oder ob es sich um eine spezifische Erweiterung handelt. Darüber hinaus verfügt PostgreSQL über ein umfangreiches Angebot an Erweiterungen durch Dritthersteller, wie zum Beispiel PostGIS zur Verwaltung von Geodaten.

PostgreSQL ist in den meisten Linux-Distributionen enthalten. Apple liefert von der Version Mac OS X Lion (10.7) an PostgreSQL als Standarddatenbank aus.

Geschichte 

PostgreSQL, zuvor bekannt unter dem Namen Postgres, später Postgres95, entstand aus einer Datenbankentwicklung der University of California in Berkeley. Den Anfang stellte dabei das Ingres-Projekt dar, wobei der Hauptverantwortliche Michael Stonebraker 1982 die Universität verließ, um Ingres kommerziell zu vertreiben. Nachdem Stonebraker 1985 wieder zur Universität zurückgekehrt war, startete er das Post-Ingres-Projekt, um die Probleme der damaligen Datenbankmanagementsysteme zu korrigieren. Die Codebasis des ersten Postgres ist dabei eine andere als die von Ingres.

1989 wurde die erste Version von Postgres fertiggestellt.

Im Jahre 1994 wurde Postgres von den Studenten Andrew Yu und Jolly Chen um einen SQL-Interpreter erweitert und die Software als Open Source unter dem Namen Postgres95 freigegeben. Der Postgres95-Code entsprach dem ANSI-C-Standard und wurde um 25 % verkleinert, weiterhin wurden Leistung und Zuverlässigkeit verbessert. Postgres95, Version 1.0.x war im Wisconsin Benchmark 30 bis 50 Prozent schneller als Postgres, Version 4.2.

Im Zuge der Entwicklung des World Wide Web verstärkte sich das Interesse an Datenbanken. 1996 erhielt Postgres seinen neuen Namen PostgreSQL. Die erste unter diesem Namen veröffentlichte Version ist 6.0. Seither wurde PostgreSQL fortlaufend weiterentwickelt.

Eigenschaften 
 Umfassendes Transaktionskonzept, das Multiversion Concurrency Control (MVCC) unterstützt
 Ermöglicht komplexe Abfragen mit Unterabfragen (Subselects), auch geschachtelt
 Referentielle Integrität (unter anderem Constraints, Fremdschlüssel)
 Mengenoperationen
 Vererbung von Tabellen
 Maximale Datenbankgröße nur durch zur Verfügung stehenden Speicher begrenzt
 Views, die mit Hilfe von Regeln (Rules und Triggers) auch schreibfähig sein können (Updatable Views)
 Trigger und gespeicherte Prozeduren (stored procedures) sind in verschiedenen Sprachen möglich: PL/pgSQL, PL/c, PL/Tcl, PL/Python, PL/Perl, PL/Java, PL/PHP, PL/Ruby, PL/R, PL/sh, PL/Scheme, PL/Parrot, PL/V8 (derzeit noch experimentell)
 Schnittstellen zu vielen Programmiersprachen, unter anderem C, C++, Object Pascal, Java/JDBC, Tcl, PHP, Perl, Python, Ruby, Xojo sowie zu ODBC und .Net-Framework
 Lauffähig auf vielen Unix-Plattformen, von Version 8.0 an auch nativ unter Microsoft Windows
 Export und Import sowohl von Daten als auch von Datenbankstrukturen (Schemata)
 Erweiterbarkeit durch Funktionen, selbstdefinierbare Datentypen und Operatoren
 Asynchrone und synchrone Replikation. Der Vorteil der synchronen Replikation liegt in der Sicherstellung, dass die Transaktion mindestens auf zwei Servern tatsächlich ausgeführt wurde, womit eine vollständige Sicherung jederzeit garantiert werden kann (Hot Standby). Diese Ausfallsicherheit wird naturgemäß durch eine längere Wartezeit auf das Commit erkauft. Daher gibt es auch die Möglichkeit, besonders wichtige Geschäftsprozesse wie finanzielle Transaktionen synchron zu replizieren, und bei weniger wichtigen Transaktionen, wie der Aufzeichnung der Benutzerinteraktionen, die sehr viel schnellere asynchrone Replikation zu nutzen.

Erweiterungen 
Eine Reihe von durch den Benutzer zu installierenden Zusatzmodulen steht zur Verfügung, darunter mit GiST (Generalized Search Tree) eine universelle Schnittstelle, um Such- und Sortierverfahren in weiten Grenzen selbst definieren zu können. Eine Anwendung davon ist PostGIS, das geografische Objekte und Datenstrukturen verwalten und damit als Datenbank für Geoinformationssysteme (GIS) dienen kann. Eine andere GiST-Anwendung ist OpenFTS (Open Source Full Text Search), das Volltextrecherche in DB-Objekten erlaubt.

Eine Reihe von Erweiterungen beschäftigt sich mit Clustering und Replizierung, dem parallelen Einsatz und Abgleich verteilter DB-Server.

Grenzwerte 
In diesem Abschnitt werden einige Beschränkungen einer älteren Version beschrieben. Da inzwischen neuere Releases bereitgestellt wurden, könnten einige davon weggefallen sein.

Die hier beschriebenen Beschränkungen betreffen die Versionen 8.4 bis 9.5:

 maximale Größe der Datenbank: unbeschränkt
 maximale Größe einer Tabelle: 32 TB
 maximale Größe eines Datensatzes: 1,6 TB
 maximale Größe einer Zelle: 1 GB
 maximale Anzahl Zeilen pro Tabelle: unbeschränkt
 VARCHAR- und TEXT-Spalten können nicht größer als 1 GB sein
 Die maximale Anzahl der Spalten pro Tabelle ist abhängig von den verwendeten Datentypen und liegt zwischen 250 und 1600

Upgrade der Datenbank 
Jede Nebenversionsnummer wird von der PostgreSQL-Entwickler-Community fünf Jahre lang weitergepflegt. Revisionen enthalten Leistungsverbesserungen und Fehlerbereinigungen, aber niemals neue Funktionen. Die älteste derzeit (Stand 06/2022) noch gepflegte Versionslinie ist 10, die im Oktober 2017 erschien.

Bei einer Software-Aktualisierung müssen bestehende Datenbanken vorher gesichert, danach in der neuen PostgreSQL-Version neu angelegt und die Daten aus der vorherigen Sicherung eingespielt werden. Dies ist dann erforderlich, wenn sich die zweite oder erste Stelle der Versionsnummer geändert hat, nicht jedoch bei Änderungen der dritten Stelle.

Alle heute unterstützten Versionen liefern ein Werkzeug namens pg_upgrade mit, welches das Datenverzeichnis ohne das vorher notwendige Sichern und Wiedereinspielen der Datenbank aktualisieren kann.

Nach einem Import einer Datenbank sollte der Befehl „Analyse“ ausgeführt werden, damit die Analyse Tabelle „pg_statistic“ richtig befüllt wird. Unterbleibt eine „Analyse“ kann dies zu Performanzproblemen führen. Auch wird geraten diesen Befehl einmal am Tag zu betriebsarmen Zeiten durchzuführen, um die Performanz zu erhalten. Auch sollte der Befehl „Vakuum“ regelmäßig ausgeführt werden, um die Datenbankgröße zu beschränken.

Versionen

Softwarewerkzeuge 
PostgreSQL selbst läuft als Hintergrundprozess und kann auf verschiedene Weise interaktiv bedient werden.
Für die kommandozeilenorientierte Bedienung wird die Konsolenanwendung psql mit der Installation mitgeliefert. Programme mit grafischer Benutzeroberfläche zur Bedienung und Verwaltung der Datenbank müssen oft gesondert installiert werden: freie Produkte sind etwa PgAdmin und phpPgAdmin. Daneben werden eine Vielzahl von kommerziellen Werkzeugen angeboten, die auch grafische CASE-Modellierung, Im- und Export-Funktionen oder DB-Monitoring bieten.
Ein MySQL-Migrationshilfswerkzeug ist in jedem freien PostgreSQL-Downloadpaket von EnterpriseDB enthalten.

Ein wichtiges Werkzeug zur Konfiguration der Datenbank ist das Python Script „pgtune“. Die Standardeinstellungen der Datenbank sind oftmals nicht auf die verwendete Hardware angepasst. „pgtune“ zeigt Lösungsvorschläge auf, wie man die Datenbank „tunen“ kann, um die Leistung der Datenbank deutlich zu steigern. Es gibt ein Online Tool um die wichtigsten Einstellungen der Datenbank zu ermitteln. Anfänger tun sich oftmals schwer die geeigneten Konfigurationsparameter zu ermitteln. Ohne geeignete Konfiguration ist die Datenbank oftmals wenig performant. Das Tool wurde ursprünglich von Greg Smith (2ndQuadrant) entwickelt.

Preise und Auszeichnungen 

An PostgreSQL wurden in der Vergangenheit zahlreiche Preise vergeben. Nicht zuletzt erhielt das Projekt den Lifetime Achievement Award im Rahmen der O’Reilly Open Source Convention 2019.

Siehe auch 
PyGreSQL, eine Python-Programmbibliothek für PostgreSQL

Literatur 
 Lutz Fröhlich: PostgreSQL 9. Praxisbuch für Administratoren und Entwickler. Hanser, München 2013, ISBN 978-3-446-42239-1.
 Peter Eisentraut, Bernd Helmle: PostgreSQL-Administration. O’Reilly, 2013, ISBN 978-3-86899-361-5.
 Ioannis Papakostas: Datenbankentwicklung mit PostgreSQL 9. TEIA AG – Internet Akademie und Lehrbuch Verlag, Berlin 2010, ISBN 978-3-942151-06-1.
 Andreas Scherbaum: PostgreSQL. Datenbankpraxis für Anwender, Administratoren und Entwickler. Open Source Press, München 2009, ISBN 978-3-937514-69-7.

Weblinks

Produkt 
 www.postgresql.org – offizielle Webpräsenz (englisch)
 www.postgres.de – deutsche Website betreffs PostgreSQL

Werkzeuge und Erläuterungen 
 PGXN (englisch) – PostgreSQL Extension Network
 Vortrag vom Chaos Computer Club Ulm: PostgreSQL – Ein Elephant vergisst nie (Video, Audio)
 Podcast: /dev/radio zu PostgreSQL
 FAQ auf sql-info.de

Einzelnachweise 

Freies Datenbankmanagementsystem
 
Unix-Software
Linux-Software
MacOS-Software
Windows-Software
Relationales Datenbankmanagementsystem