PostgreSQL ( [])Hörbeispiel zur Aussprache von „PostgreSQL“ (MP3-Datei; 5,6 kB), 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:2023, das heißt, der Großteil der Funktionen ist verfügbar und verhält sich wie definiert. In der aktuellen Version 18 werden von 177 obligatorischen Merkmalen 170 erfüllt. 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, allerdings oft in der Version, die bei Erscheinen des Release aktuell war. Aktuellere Versionen gibt es für viele Linux-Distributionen in von der PostgreSQL Developer Group bereitgestellten Repositories. Apple liefert von der Version Mac OS X Lion (10.7) an PostgreSQL als Standarddatenbank aus.

Geschichte mini|PostgreSQL-Zeitleiste 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 Sehr umfangreiches Angebot an Datentypen, auch über den im ANSI/ISO-Standard beschriebenen hinaus. Beispielsweise können IP-Adressen, MAC-Adressen, zweidimensionale geometrische Figuren (Kreis, Linie, Polygon usw.) und Bereiche (von/bis) gespeichert werden. 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, Funktionen 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.

Viele Erweiterungen bieten zusätzliche Datentypen an, beispielsweise solche für IBANs, ISBNs, EANs. Einige Erweiterungen sind im Lieferumfang des Projekts bereits enthalten und brauchen lediglich für die jeweilige Datenbank (nicht den Server an sich) aktiviert zu werden.

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

maximale Größe der Datenbank: unbeschränkt maximale Größe einer Tabelle: 32 TB (mit Standard-Blockgröße) maximale Größe einer Zelle: 1 GB maximale Anzahl Zeilen pro Tabelle: unbeschränkt Die maximale Anzahl der Spalten pro Tabelle ist abhängig von den verwendeten Datentypen und kann bis zu 1600 betragen

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 Dezember 2024) noch gepflegte Versionslinie ist 13, die im September 2020 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 erste Stelle der Versionsnummer geändert hat, nicht jedoch bei Änderungen der zweiten Stelle.

Alle noch 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 größerer Datenmengen in eine Datenbank sollte der Befehl „ANALYZE“ ausgeführt werden, damit die Analyse Tabelle „pg_statistics“ richtig befüllt wird. Unterbleibt diese Analyse, kann dies zu Performanzproblemen führen. Ansonsten wird dies, genau wie das Kommando „VACUUM“ zur Freigabe von Speicherplatz (eine Art Garbage Collection) in regelmäßigen Abständen automatisch durchgeführt.

Versionen +VersionVeröffentlicht amBeschreibung / Anmerkung7.417. November 20038.019. Januar 2005Von der Version 8.0 an unterstützt PostgreSQL Windows. Eine weitere Neuerung ist die Unterstützung von Sicherungspunkten (Savepoints). Mit diesen ist es möglich, eine Transaktion an einem vorher gespeicherten Sicherungspunkt fortzusetzen, falls diese durch einen Fehler abgebrochen wurde.8.3Februar 2008Version 8.3 brachte eine Reihe von Leistungsverbesserungen sowie Funktionserweiterungen, darunter: Volltextrecherche, die bisher als Zusatzprodukt verfügbar war, ist nun in den Kern der DB integriert. XML-Verarbeitung wird durch einen XML-Datentypen unterstützt, der jeweils ein XML-Dokument enthält; bei Abfragen können nun etwa SQL- mit XPath-Queries in einer Transaktion kombiniert werden. Dieses Verfahren wurde 2006 bei Db2 von IBM vorgestellt. Datentypen ENUM und UUID.9.0September 2010Version 9.0 brachte Funktionen für Replikation und Hot-Standby und Verbesserungen bei Sicherheit, Monitoring und speziellen Datentypen.9.112. September 2011Version 9.1 brachte eine Verbesserung der Hochverfügbarkeit bei Betrieb von mehreren Servern mit Hilfe synchroner Replikation, Zugriff auf fremde Datenquellen, spaltenweise linguistisch korrekte Sortierbarkeit, Einbindung von Erweiterungen sowie eine Reihe weiterer Verbesserungen.PostgreSQL 9.1 erschienen – Artikel bei Golem.de, vom 16. September 2011.9.210. September 2012Version 9.2 enthält in erster Linie neue Funktionalitäten zur Verbesserung der Performance.PostgreSQL 9.2: Release Notes – PostgreSQL-Online-Dokumentation, vom 10. September 2012.9.39. September 2013Wesentliche Verbesserungen sind im Bereich der Unterstützung von JSON, bei materialisierten Views und beschreibbaren Views.9.418. Dezember 2014Beschleunigte Verarbeitung von JSON-Daten durch das binäre Format JSONB.9.57. Januar 2016Row-level security control, Block Range Indexes (BRIN), IMPORT FOREIGN SCHEMA, pg_rewind hinzugefügt.E.26. Release 9.5, auf postgresql.org9.629. September 2016Die wichtigsten Änderungen betreffen vertikale („scale-up“) als auch horizontale („scale-out“) Skalierung, parallelisierte Abfragen, Phrasensuche und Verbesserungen bei synchroner Replikation, sowie generelle verbesserte Performance und Benutzerfreundlichkeit.E.25. Release 9.6, auf postgresql.org105. Oktober 2017Die wichtigsten Änderungen betreffen deklarative Partitionierung, logische Replikation, verbesserte Abfrage-Parallelisierung und bessere Password-Hashes.1118. Oktober 2018Es wurde weiter die Robustheit und die Leistung für die Partitionierung, die Unterstützung von Transaktionen in gespeicherten Prozeduren und die Abfrageparallelität in parallel laufenden Abfragen verbessert. Es gibt nun auch eine Just-in-Time-Kompilierung (JIT) für Ausdrücke.11.39. Mai 201911.420. Juni 201911.58. August 2019123. Oktober 2019Verbesserung in der Abfragegeschwindigkeit und Abfrage von SQL/JSON-Ausdrücken. Mit dieser Version ist es nun auch möglich, das Table-Storage auszutauschen.1325. September 2020Die Veränderungen betreffen:

Geringerer Speicherplatzbedarf durch Deduplikation in B-tree Indexen Verbesserte Leistung bei Abfragen, welche Aggregatfunktionen oder partitionierte Tabellen verwenden

Vakuumieren von Indexen wird parallelisiert ausgeführt.1430. September 2021Die Veränderungen betreffen: Komfort beim Umgang mit JSON-Daten und Multi-Ranges Performance für ressourcenintensive Lasten Verbesserungen für verteilte Datenbanken, Administration und Fortschrittsanalyse SQL Performance, Konformität und Komfort Sicherheit (vordefinierte Rollen, Passwortstandard SCRAM-SHA-256 als Standard)1513. Oktober 2022 SQL MERGE Befehl Verbesserte Sortieralgorithmen Server Logging ist nun auch im JSON Format verfügbar

Das public-Schema gehört jetzt immer dem jeweiligen Datenbank-Eigentümer, andere Rollen haben kein Schreibrecht mehr darauf.1614. September 2023 Parallelisierung von Full und Right Outer Hash Joins sowie der Funktionen string_agg() und array_agg() Logische Replikation auch von Standby Servern SQL/JSON Konstruktoren und Identity Funktionen

weitere Statistiken über Tabellen

Optionen für das GRANT-Kommando

Reguläre Ausdrücke in der Datei pg_hba.conf für die Zugriffssteuerung1726. September 2024Die Veränderungen betreffen: Systemweite Performance-Zuwächse Weiterer Ausbau einer robusten Developer Experience Verbesserungen der logischen Replikation für hohe Verfügbarkeit und Major Version Upgrades