PostgreSQL

Aus besserwiki.de
PostgreSQL
Die weltweit fortschrittlichste relationale Open-Source-Datenbank
Die weltweit fortschrittlichste relationale Open-Source-Datenbank
Entwickler(n)PostgreSQL Global Development Group
Erste Veröffentlichung8. Juli 1996;
vor 26 Jahren
Vorschau-Release
15 Beta 2 / 30. Juni 2022;
vor 7 Monaten
Geschrieben inC
BetriebssystemmacOS, Windows, Linux, FreeBSD, OpenBSD
TypRDBMS
LizenzPostgreSQL-Lizenz (frei und quelloffen, freizügig)
PostgreSQL-Lizenz
HerausgeberPostgreSQL Global Development Group
Regenten der Universität von Kalifornien
Debian FSG-kompatibelJa
FSF genehmigtJa
OSI genehmigtJa
GPL-kompatibelJa
CopyleftNein
Verlinkung von Code mit einer anderen LizenzJa
Websitepostgresql.org/about/licence

PostgreSQL (/ˈpstɡrɛs ˌkjuː ˈɛl/, POHST-gres kyoo el), auch bekannt als Postgres, ist ein freies und quelloffenes relationales Datenbankmanagementsystem (RDBMS) mit Schwerpunkt auf Erweiterbarkeit und SQL-Konformität. Ursprünglich trug es den Namen POSTGRES, was sich auf seine Ursprünge als Nachfolger der Ingres-Datenbank bezieht, die an der University of California, Berkeley, entwickelt wurde. Im Jahr 1996 wurde das Projekt in PostgreSQL umbenannt, um die Unterstützung für SQL zu verdeutlichen. Nach einer Überprüfung im Jahr 2007 beschloss das Entwicklungsteam, den Namen PostgreSQL und den Alias Postgres beizubehalten.

PostgreSQL bietet Transaktionen mit den Eigenschaften Atomicity, Consistency, Isolation, Durability (ACID), automatisch aktualisierbare Views, Materialized Views, Trigger, Fremdschlüssel und Stored Procedures. Es wurde entwickelt, um eine Reihe von Arbeitslasten zu bewältigen, von einzelnen Maschinen bis hin zu Data Warehouses oder Webservices mit vielen gleichzeitigen Benutzern. Sie ist die Standarddatenbank für macOS Server und ist auch für Windows, Linux, FreeBSD und OpenBSD verfügbar.

PostgreSQL (englisch [,pəʊstgɹɛs kjʊ'ɛl]), 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, d. h. 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 z. B. 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 ist aus dem Ingres-Projekt an der University of California, Berkeley, hervorgegangen. Im Jahr 1982 verließ der Leiter des Ingres-Teams, Michael Stonebraker, Berkeley, um eine proprietäre Version von Ingres zu entwickeln. Er kehrte 1985 nach Berkeley zurück und begann ein Post-Ingres-Projekt, um die Probleme mit zeitgenössischen Datenbanksystemen anzugehen, die in den frühen 1980er Jahren immer deutlicher geworden waren. Für diese und andere Projekte und Techniken, die er dabei entwickelte, erhielt er 2014 den Turing Award.

Das neue Projekt, POSTGRES, zielte darauf ab, so wenige Funktionen wie möglich hinzuzufügen, um Datentypen vollständig zu unterstützen. Zu diesen Funktionen gehörte die Möglichkeit, Typen zu definieren und Beziehungen vollständig zu beschreiben - etwas, das weit verbreitet ist, aber vollständig vom Benutzer gepflegt wird. In POSTGRES verstand die Datenbank Beziehungen und konnte Informationen in verwandten Tabellen auf natürliche Weise mit Hilfe von Regeln abrufen. POSTGRES verwendete viele der Ideen von Ingres, aber nicht dessen Code.

Ab 1986 wurden in Veröffentlichungen die Grundlagen des Systems beschrieben, und eine Prototypversion wurde 1988 auf der ACM SIGMOD-Konferenz vorgestellt. Im Juni 1989 gab das Team Version 1 für eine kleine Anzahl von Benutzern frei, gefolgt von Version 2 mit einem neu geschriebenen Regelsystem im Juni 1990. Version 3, die 1991 veröffentlicht wurde, schrieb das Regelsystem erneut um und fügte Unterstützung für mehrere Speichermanager und eine verbesserte Abfragemaschine hinzu. 1993 begann die Zahl der Benutzer das Projekt mit Anfragen nach Unterstützung und neuen Funktionen zu überschwemmen. Nach der Veröffentlichung von Version 4.2 am 30. Juni 1994 - in erster Linie eine Aufräumaktion - wurde das Projekt eingestellt. Berkeley gab POSTGRES unter einer MIT-Lizenzvariante frei, die es anderen Entwicklern ermöglichte, den Code für beliebige Zwecke zu verwenden. Damals verwendete POSTGRES einen von Ingres beeinflussten POSTQUEL-Abfragesprachen-Interpreter, der interaktiv mit einer Konsolenanwendung namens Monitor.

1994 ersetzten die Berkeley-Studenten Andrew und Jolly Chen den POSTQUEL-Interpreter durch einen Interpreter für die Abfragesprache SQL und schufen Postgres95. Die Monitor Konsole wurde ebenfalls ersetzt durch psql. Yu und Chen kündigten die erste Version (0.01) am 5. Mai 1995 für Beta-Tester an. Version 1.0 von Postgres95 wurde am 5. September 1995 angekündigt, mit einer liberaleren Lizenz, die es ermöglichte, die Software frei zu modifizieren.

Am 8. Juli 1996 stellte Marc Fournier von Hub.org Networking Services den ersten nicht-universitären Entwicklungsserver für die Open-Source-Entwicklung zur Verfügung. Mit der Beteiligung von Bruce Momjian und Vadim B. Mikheev begann die Arbeit an der Stabilisierung des von Berkeley übernommenen Codes.

Im Jahr 1996 wurde das Projekt in PostgreSQL umbenannt, um die Unterstützung für SQL zu verdeutlichen. Die Online-Präsenz auf der Website PostgreSQL.org begann am 22. Oktober 1996. Die erste PostgreSQL-Veröffentlichung war die Version 6.0 am 29. Januar 1997. Seitdem pflegen Entwickler und Freiwillige auf der ganzen Welt die Software als The PostgreSQL Global Development Group.

Das Projekt stellt weiterhin Versionen unter der freien und quelloffenen PostgreSQL-Lizenz zur Verfügung. Der Code stammt aus Beiträgen von proprietären Anbietern, Support-Unternehmen und Open-Source-Programmierern.

PostgreSQL-Zeitleiste

1989 wurde die erste Version von Postgres fertiggestellt.

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.

Multiversions-Gleichzeitigkeitskontrolle (MVCC)

PostgreSQL verwaltet die Gleichzeitigkeit durch die Multiversion Concurrency Control (MVCC), die jeder Transaktion einen "Schnappschuss" der Datenbank gibt, so dass Änderungen vorgenommen werden können, ohne andere Transaktionen zu beeinträchtigen. Dies macht Lesesperren weitgehend überflüssig und gewährleistet, dass die Datenbank die ACID-Prinzipien beibehält. PostgreSQL bietet drei Stufen der Transaktionsisolation: Read Committed, Repeatable Read und Serializable. Da PostgreSQL immun gegen Dirty Reads ist, bietet die Anforderung einer Read Uncommitted Transaktionsisolationsebene stattdessen Read Committed. PostgreSQL unterstützt die vollständige Serialisierbarkeit über die Methode der serialisierbaren Snapshot-Isolierung (SSI).

Speicherung und Replikation

Replikation

PostgreSQL enthält eine eingebaute binäre Replikation, die auf der asynchronen Übertragung von Änderungen (Write-ahead Logs (WAL)) an Replikationsknoten basiert, mit der Möglichkeit, nur lesende Abfragen gegen diese replizierten Knoten auszuführen. Dies ermöglicht eine effiziente Aufteilung des Leseverkehrs auf mehrere Knoten. Frühere Replikationssoftware, die eine ähnliche Leseskalierung ermöglichte, war normalerweise auf das Hinzufügen von Replikationstriggern zum Master angewiesen, was die Last erhöhte.

PostgreSQL enthält eine eingebaute synchrone Replikation, die sicherstellt, dass der Master bei jeder Schreibtransaktion wartet, bis mindestens ein Replikationsknoten die Daten in sein Transaktionsprotokoll geschrieben hat. Im Gegensatz zu anderen Datenbanksystemen kann die Dauerhaftigkeit einer Transaktion (ob sie asynchron oder synchron ist) pro Datenbank, pro Benutzer, pro Sitzung oder sogar pro Transaktion festgelegt werden. Dies kann für Arbeitslasten nützlich sein, die keine derartigen Garantien erfordern, und ist möglicherweise nicht für alle Daten erwünscht, da es die Leistung verlangsamt, da die Bestätigung der Transaktion den synchronen Standby-Server erreichen muss.

Standby-Server können synchron oder asynchron sein. Synchrone Standby-Server können in der Konfiguration angegeben werden, die bestimmt, welche Server für eine synchrone Replikation in Frage kommen. Der erste in der Liste, der aktiv streamt, wird als aktueller synchroner Server verwendet. Fällt dieser aus, geht das System auf den nächsten in der Reihe über.

Synchrone Multi-Master-Replikation ist im PostgreSQL-Kern nicht enthalten. Postgres-XC, das auf PostgreSQL basiert, bietet skalierbare synchrone Multi-Master-Replikation. Es ist unter der gleichen Lizenz wie PostgreSQL lizenziert. Ein verwandtes Projekt heißt Postgres-XL. Postgres-R ist ein weiterer Fork. Bidirektionale Replikation (BDR) ist ein asynchrones Multi-Master-Replikationssystem für PostgreSQL.

Werkzeuge wie repmgr erleichtern die Verwaltung von Replikationsclustern.

Es sind mehrere asynchrone, trigger-basierte Replikationspakete verfügbar. Diese bleiben auch nach der Einführung der erweiterten Core-Fähigkeiten nützlich, für Situationen, in denen die binäre Replikation eines vollständigen Datenbank-Clusters unangemessen ist:

  • Slony-I
  • Londiste, Teil von SkyTools (entwickelt von Skype)
  • Bucardo Multi-Master-Replikation (entwickelt von Backcountry.com)
  • SymmetricDS Multi-Master-, Multi-Tier-Replikation

Indizes

PostgreSQL enthält eingebaute Unterstützung für reguläre B-Baum- und Hash-Tabellen-Indizes und vier Index-Zugriffsmethoden: verallgemeinerte Suchbäume (GiST), verallgemeinerte invertierte Indizes (GIN), Space-Partitioned GiST (SP-GiST) und Block Range Indizes (BRIN). Darüber hinaus können benutzerdefinierte Indexmethoden erstellt werden, obwohl dies ein recht aufwendiger Prozess ist. Indizes in PostgreSQL unterstützen auch die folgenden Funktionen:

  • Expression-Indizes können mit einem Index auf das Ergebnis eines Ausdrucks oder einer Funktion erstellt werden, anstatt einfach auf den Wert einer Spalte.
  • Partielle Indizes, die nur einen Teil einer Tabelle indizieren, können durch Hinzufügen einer WHERE-Klausel am Ende der CREATE INDEX-Anweisung erstellt werden. Dadurch kann ein kleinerer Index erstellt werden.
  • Der Planer ist in der Lage, mehrere Indizes zusammen zu verwenden, um komplexe Abfragen zu erfüllen, indem er temporäre In-Memory-Bitmap-Indexoperationen verwendet (nützlich für Data-Warehouse-Anwendungen zum Verbinden einer großen Faktentabelle mit kleineren Dimensionstabellen, wie sie in einem Sternschema angeordnet sind).
  • Die k-nearest neighbors (k-NN)-Indizierung (auch KNN-GiST genannt) ermöglicht eine effiziente Suche nach den "nächstgelegenen Werten", was bei der Suche nach ähnlichen Wörtern oder nahe gelegenen Objekten oder Orten in Geodaten nützlich ist. Dies wird erreicht, ohne dass ein erschöpfender Abgleich der Werte erfolgt.
  • Bei reinen Index-Scans kann das System oft Daten aus Indizes abrufen, ohne jemals auf die Haupttabelle zugreifen zu müssen.
  • Blockbereich-Indizes (BRIN).

Schemas

In PostgreSQL enthält ein Schema alle Objekte, mit Ausnahme von Rollen und Tablespaces. Schemas funktionieren wie Namensräume und ermöglichen es, dass Objekte mit demselben Namen in derselben Datenbank nebeneinander existieren können. Standardmäßig haben neu erstellte Datenbanken ein Schema namens public, aber es können beliebige weitere Schemas hinzugefügt werden, und das public-Schema ist nicht obligatorisch.

A such_pfad Einstellung bestimmt die Reihenfolge, in der PostgreSQL Schemata auf unqualifizierte Objekte (solche ohne vorangestelltes Schema) überprüft. Standardmäßig ist sie eingestellt auf $user, public ($benutzer bezieht sich auf den aktuell verbundenen Datenbankbenutzer). Dieser Standardwert kann auf Datenbank- oder Rollenebene gesetzt werden, aber da es sich um einen Sitzungsparameter handelt, kann er während einer Client-Sitzung frei geändert werden (auch mehrfach), was nur diese Sitzung betrifft.

Nicht existierende Schemata, die in search_path aufgeführt sind, werden bei der Objektsuche übersprungen.

Neue Objekte werden in demjenigen gültigen Schema erstellt, das als erstes im search_path auftaucht (d.h. in einem Schema, das gegenwärtig existiert).

Datentypen

Es wird eine Vielzahl von nativen Datentypen unterstützt, darunter:

  • Boolesche
  • Numerische Werte mit beliebiger Genauigkeit
  • Zeichen (text, varchar, char)
  • Binär
  • Datum/Zeit (Zeitstempel/Zeit mit/ohne Zeitzone, Datum, Intervall)
  • Geld
  • Aufzählung
  • Bit-Strings
  • Text-Suchtyp
  • Zusammengesetzte
  • HStore, ein erweiterungsfähiger Key-Value-Speicher innerhalb von PostgreSQL
  • Arrays (variable Länge und beliebiger Datentyp, einschließlich Text und zusammengesetzte Typen) bis zu einer Gesamtspeichergröße von 1 GB
  • Geometrische Primitive
  • IPv4- und IPv6-Adressen
  • CIDR-Blöcke (Classless Inter-Domain Routing) und MAC-Adressen
  • XML mit Unterstützung für XPath-Abfragen
  • Universell eindeutiger Bezeichner (UUID)
  • JavaScript Object Notation (JSON) und ein schnelleres binäres JSONB (nicht dasselbe wie BSON)

Darüber hinaus können Benutzer ihre eigenen Datentypen erstellen, die in der Regel über die Indexierungsinfrastrukturen von PostgreSQL - GiST, GIN, SP-GiST - vollständig indizierbar gemacht werden können. Beispiele hierfür sind die geographischen Informationssystem (GIS)-Datentypen aus dem PostGIS-Projekt für PostgreSQL.

Es gibt auch einen Datentyp, der Domäne genannt wird, der derselbe ist wie jeder andere Datentyp, aber mit optionalen Einschränkungen, die vom Ersteller dieser Domäne definiert werden. Das bedeutet, dass alle Daten, die in eine Spalte eingegeben werden, die die Domäne verwendet, mit den Einschränkungen übereinstimmen müssen, die als Teil der Domäne definiert wurden.

Es kann ein Datentyp verwendet werden, der einen Datenbereich darstellt, der als Bereichstyp bezeichnet wird. Dabei kann es sich um diskrete Bereiche (z. B. alle ganzzahligen Werte von 1 bis 10) oder um kontinuierliche Bereiche (z. B. jede Zeit zwischen 10:00 Uhr und 11:00 Uhr) handeln. Zu den eingebauten Bereichstypen gehören Bereiche für Ganzzahlen, große Ganzzahlen, Dezimalzahlen, Zeitstempel (mit und ohne Zeitzone) und Datumsangaben.

Es können benutzerdefinierte Bereichstypen erstellt werden, um neue Arten von Bereichen verfügbar zu machen, wie z. B. IP-Adressbereiche, die den Typ inet als Basis verwenden, oder Float-Bereiche, die den Datentyp float als Basis verwenden. Bereichstypen unterstützen einschließende und ausschließende Bereichsgrenzen unter Verwendung der [/] und (/) entsprechende Zeichen. (z.B., [4,9) steht für alle ganzen Zahlen von und einschließlich 4 bis einschließlich 9). Die Bereichstypen sind auch mit den vorhandenen Operatoren kompatibel, die zur Prüfung auf Überlappung, Einschluss, rechts von usw. verwendet werden.

Benutzerdefinierte Objekte

Es können neue Typen für fast alle Objekte in der Datenbank erstellt werden, einschließlich:

  • Besetzungen
  • Konvertierungen
  • Datentypen
  • Daten-Domänen
  • Funktionen, einschließlich Aggregatfunktionen und Fensterfunktionen
  • Indizes, einschließlich benutzerdefinierter Indizes für benutzerdefinierte Typen
  • Operatoren (bestehende Operatoren können überladen werden)
  • Prozedurale Sprachen

Vererbung

Tabellen können so eingestellt werden, dass sie ihre Eigenschaften von einer übergeordneten Tabelle erben. Die Daten in den untergeordneten Tabellen scheinen in den übergeordneten Tabellen zu existieren, es sei denn, die Daten werden mit dem Schlüsselwort ONLY aus der übergeordneten Tabelle ausgewählt, d. h. SELECT * FROM ONLY übergeordnete_Tabelle;. Das Hinzufügen einer Spalte in der Elterntabelle führt dazu, dass diese Spalte auch in der Kindtabelle erscheint.

Die Vererbung kann verwendet werden, um eine Tabellenpartitionierung zu implementieren, indem entweder Trigger oder Regeln verwendet werden, um Einfügungen in die übergeordnete Tabelle in die entsprechenden untergeordneten Tabellen zu leiten.

Seit 2010 wird diese Funktion noch nicht vollständig unterstützt - insbesondere sind Tabellenbeschränkungen derzeit nicht vererbbar. Alle Prüfbeschränkungen und Nicht-Null-Beschränkungen einer übergeordneten Tabelle werden automatisch an die untergeordneten Tabellen vererbt. Andere Arten von Beschränkungen (eindeutige, Primärschlüssel- und Fremdschlüssel-Beschränkungen) werden nicht vererbt.

Die Vererbung bietet eine Möglichkeit, die Eigenschaften von Generalisierungshierarchien, die in Entity-Relationship-Diagrammen (ERDs) dargestellt sind, direkt in der PostgreSQL-Datenbank abzubilden.

Andere Speicherfunktionen

  • Referentielle Integritätsbeschränkungen, einschließlich Fremdschlüssel-Beschränkungen, Spaltenbeschränkungen und Zeilenprüfungen
  • Binäre und textuelle Speicherung von großen Objekten
  • Tablespaces
  • Kollationierung pro Spalte
  • Online-Sicherung
  • Point-in-Time-Recovery, implementiert mit Write-Ahead-Logging
  • In-Place-Upgrades mit pg_upgrade für weniger Ausfallzeiten

Kontrolle und Konnektivität

Fremddaten-Wrapper

PostgreSQL kann sich mit anderen Systemen verbinden, um Daten über Fremddatenumhüllungen (FDWs) abzurufen. Diese können die Form einer beliebigen Datenquelle annehmen, wie z.B. ein Dateisystem, ein anderes relationales Datenbankmanagementsystem (RDBMS) oder ein Webservice. Das bedeutet, dass reguläre Datenbankabfragen diese Datenquellen wie reguläre Tabellen verwenden und sogar mehrere Datenquellen miteinander verbinden können.

Schnittstellen

Für die Verbindung zu Anwendungen enthält PostgreSQL die eingebauten Schnittstellen libpq (die offizielle C-Anwendungsschnittstelle) und ECPG (ein eingebettetes C-System). Bibliotheken von Drittanbietern für die Anbindung an PostgreSQL sind für viele Programmiersprachen verfügbar, darunter C++, Java, Julia, Python, Node.js, Go und Rust.

Prozedurale Sprachen

Prozedurale Sprachen ermöglichen es Entwicklern, die Datenbank mit benutzerdefinierten Unterprogrammen (Funktionen) zu erweitern, die oft als Stored Procedures bezeichnet werden. Diese Funktionen können zur Erstellung von Datenbank-Triggern (Funktionen, die bei der Änderung bestimmter Daten aufgerufen werden) sowie von benutzerdefinierten Datentypen und Aggregatfunktionen verwendet werden. Prozedurale Sprachen können auch ohne Definition einer Funktion aufgerufen werden, indem ein DO-Befehl auf SQL-Ebene verwendet wird.

Die Sprachen werden in zwei Gruppen unterteilt: Prozeduren, die in sicheren Sprachen geschrieben sind, befinden sich in einer Sandbox und können von jedem Benutzer sicher erstellt und verwendet werden. Prozeduren, die in unsicheren Sprachen geschrieben sind, können nur von Superusern erstellt werden, da sie die Umgehung der Sicherheitsbeschränkungen einer Datenbank ermöglichen, aber auch auf Quellen außerhalb der Datenbank zugreifen können. Einige Sprachen wie Perl bieten sowohl sichere als auch unsichere Versionen an.

PostgreSQL hat eingebaute Unterstützung für drei prozedurale Sprachen:

  • Plain SQL (sicher). Einfachere SQL-Funktionen können inline in die aufrufende (SQL-)Abfrage erweitert werden, was den Overhead für Funktionsaufrufe einspart und es dem Abfrageoptimierer ermöglicht, in die Funktion "hineinzusehen".
  • Prozedurale Sprache/PostgreSQL (PL/pgSQL) (sicher), die der prozeduralen Sprache von Oracle für SQL (PL/SQL) und SQL/Persistent Stored Modules (SQL/PSM) ähnelt.
  • C (unsicher), das das Laden einer oder mehrerer benutzerdefinierter Shared Librarys in die Datenbank ermöglicht. In C geschriebene Funktionen bieten die beste Leistung, aber Fehler im Code können zum Absturz führen und möglicherweise die Datenbank beschädigen. Die meisten eingebauten Funktionen sind in C geschrieben.

Darüber hinaus erlaubt PostgreSQL das Laden von prozeduralen Sprachen in die Datenbank durch Erweiterungen. Drei Spracherweiterungen sind in PostgreSQL enthalten, um Perl, Tcl und Python zu unterstützen. Für Python wird standardmäßig das abgekündigte Python 2 verwendet (plpythonu oder plpython2u), auch in PostgreSQL 14; Python 3 wird ebenfalls unterstützt, wenn die Sprache plpython3u). Externe Projekte bieten Unterstützung für viele andere Sprachen, einschließlich PL/Java, JavaScript (PL/V8), PL/Julia PL/R, PL/Ruby, und andere.

Auslöser

Trigger sind Ereignisse, die durch die Aktion von SQL Data Manipulation Language (DML)-Anweisungen ausgelöst werden. So kann beispielsweise eine INSERT-Anweisung einen Trigger aktivieren, der prüft, ob die Werte der Anweisung gültig sind. Die meisten Trigger werden nur entweder durch INSERT- oder UPDATE-Anweisungen aktiviert.

Trigger werden vollständig unterstützt und können an Tabellen angehängt werden. Trigger können spaltenbezogen und bedingt sein, d. h. UPDATE-Trigger können auf bestimmte Spalten einer Tabelle abzielen, und Trigger können unter einer Reihe von Bedingungen ausgeführt werden, die in der WHERE-Klausel des Triggers angegeben sind. Trigger können an Ansichten angehängt werden, indem die INSTEAD OF-Bedingung verwendet wird. Mehrere Trigger werden in alphabetischer Reihenfolge abgefeuert. Neben dem Aufruf von Funktionen, die im nativen PL/pgSQL geschrieben wurden, können Trigger auch Funktionen aufrufen, die in anderen Sprachen wie PL/Python oder PL/Perl geschrieben wurden.

Asynchrone Benachrichtigungen

PostgreSQL bietet ein asynchrones Nachrichtensystem, auf das über die Befehle NOTIFY, LISTEN und UNLISTEN zugegriffen wird. Eine Sitzung kann einen NOTIFY-Befehl zusammen mit dem benutzerdefinierten Kanal und einer optionalen Nutzlast absetzen, um ein bestimmtes Ereignis zu markieren. Andere Sitzungen sind in der Lage, diese Ereignisse zu erkennen, indem sie einen LISTEN-Befehl erteilen, der einen bestimmten Kanal abhören kann. Diese Funktionalität kann für eine Vielzahl von Zwecken genutzt werden, z. B. um anderen Sitzungen mitzuteilen, dass eine Tabelle aktualisiert wurde, oder um für separate Anwendungen zu erkennen, wann eine bestimmte Aktion durchgeführt wurde. Ein solches System verhindert, dass Anwendungen ständig abfragen müssen, ob sich etwas geändert hat, und reduziert unnötigen Overhead. Benachrichtigungen sind vollständig transaktional, d. h. Nachrichten werden erst gesendet, wenn die Transaktion, aus der sie gesendet wurden, abgeschlossen ist. Dadurch wird das Problem beseitigt, dass Nachrichten für eine durchgeführte Aktion gesendet werden, die dann rückgängig gemacht wird.

Viele Konnektoren für PostgreSQL bieten Unterstützung für dieses Benachrichtigungssystem (einschließlich libpq, JDBC, Npgsql, psycopg und node.js), so dass es von externen Anwendungen genutzt werden kann.

PostgreSQL kann durch die Kombination von LISTEN mit FOR UPDATE SKIP LOCKED als effektiver, persistenter "pub/sub"-Server oder Jobserver fungieren.

Regeln

Regeln erlauben es, den "Abfragebaum" einer eingehenden Abfrage neu zu schreiben. "Query Re-Write Rules" werden an eine Tabelle/Klasse angehängt und "schreiben" die eingehende DML (select, insert, update und/oder delete) in eine oder mehrere Abfragen um, die entweder die ursprüngliche DML-Anweisung ersetzen oder zusätzlich zu ihr ausgeführt werden. Query Re-Write erfolgt nach dem Parsen der DML-Anweisung, aber vor der Abfrageplanung.

Andere Abfragefunktionen

  • Transaktionen
  • Volltextsuche
  • Ansichten
    • Materialisierte Ansichten
    • Aktualisierbare Ansichten
    • Rekursive Ansichten
  • Innere, äußere (vollständige, linke und rechte) und Kreuzverknüpfungen
  • Unter-Auswahlen
    • Korrelierte Unterabfragen
  • Reguläre Ausdrücke
  • allgemeine Tabellenausdrücke und beschreibbare allgemeine Tabellenausdrücke
  • Verschlüsselte Verbindungen über Transport Layer Security (TLS); aktuelle Versionen verwenden kein anfälliges SSL, selbst mit dieser Konfigurationsoption
  • Domänen
  • Speicherpunkte
  • Zwei-Phasen-Commit
  • Die Oversized-Attribute Storage Technique (TOAST) wird verwendet, um große Tabellenattribute (z. B. große MIME-Anhänge oder XML-Nachrichten) transparent in einem separaten Bereich mit automatischer Komprimierung zu speichern.
  • Eingebettetes SQL wird mit Hilfe eines Präprozessors implementiert. Der SQL-Code wird zunächst eingebettet in C-Code geschrieben. Dann wird der Code durch den ECPG-Präprozessor geleitet, der SQL durch Aufrufe der Code-Bibliothek ersetzt. Anschließend kann der Code mit einem C-Compiler kompiliert werden. Die Einbettung funktioniert auch mit C++, aber es werden nicht alle C++-Konstrukte erkannt.

Gleichzeitigkeitsmodell

Der PostgreSQL-Server ist prozessbasiert (nicht threaded) und verwendet einen Betriebssystemprozess pro Datenbanksitzung. Mehrere Sitzungen werden vom Betriebssystem automatisch auf alle verfügbaren CPUs verteilt. Viele Abfragetypen können auch über mehrere Hintergrundprozesse parallelisiert werden, indem mehrere CPUs oder Kerne genutzt werden. Client-Anwendungen können Threads verwenden und von jedem Thread aus mehrere Datenbankverbindungen herstellen.

Sicherheit

PostgreSQL verwaltet seine interne Sicherheit auf einer rollenspezifischen Basis. Eine Rolle ist im Allgemeinen ein Benutzer (eine Rolle, die sich anmelden kann) oder eine Gruppe (eine Rolle, der andere Rollen angehören). Berechtigungen können für jedes Objekt bis hinunter zur Spaltenebene gewährt oder entzogen werden und können auch die Erstellung neuer Objekte auf Datenbank-, Schema- oder Tabellenebene erlauben/verhindern.

Die SECURITY LABEL-Funktion von PostgreSQL (Erweiterung der SQL-Standards) ermöglicht zusätzliche Sicherheit; mit einem gebündelten, ladbaren Modul, das label-basierte obligatorische Zugriffskontrolle (MAC) auf der Grundlage der Security-Enhanced Linux (SELinux)-Sicherheitspolitik unterstützt.

PostgreSQL unterstützt nativ eine große Anzahl von externen Authentifizierungsmechanismen, darunter:

  • Passwort: entweder SCRAM-SHA-256 (seit PostgreSQL 10), MD5 oder Klartext
  • Generic Security Services Application Program Interface (GSSAPI)
  • Schnittstelle für Sicherheitsdienstanbieter (SSPI)
  • Kerberos
  • ident (ordnet den O/S-Benutzernamen, der von einem ident-Server bereitgestellt wird, dem Datenbank-Benutzernamen zu)
  • Peer (ordnet den lokalen Benutzernamen dem Benutzernamen in der Datenbank zu)
  • Lightweight Directory Access Protocol (LDAP)
    • Aktives Verzeichnis (AD)
  • RADIUS
  • Zertifikat
  • Steckbares Authentifizierungsmodul (PAM)

Die GSSAPI-, SSPI-, Kerberos-, Peer-, Ident- und Zertifikatsmethoden können auch eine bestimmte "Map"-Datei verwenden, in der aufgelistet ist, welche Benutzer, die mit diesem Authentifizierungssystem übereinstimmen, eine Verbindung als ein bestimmter Datenbankbenutzer herstellen dürfen.

Diese Methoden werden in der Konfigurationsdatei für die hostbasierte Authentifizierung des Clusters angegeben (pg_hba.conf) festgelegt, die bestimmt, welche Verbindungen erlaubt sind. Auf diese Weise lässt sich steuern, welcher Benutzer eine Verbindung zu welcher Datenbank herstellen kann, von wo aus er eine Verbindung herstellen kann (IP-Adresse, IP-Adressbereich, Domänensocket), welches Authentifizierungssystem erzwungen wird und ob die Verbindung Transport Layer Security (TLS) verwenden muss.

Einhaltung von Standards

PostgreSQL beansprucht eine hohe, aber nicht vollständige Konformität mit dem neuesten SQL-Standard (für Version 13 "im September 2020 ist PostgreSQL konform zu mindestens 170 der 179 obligatorischen Merkmale für SQL:2016 Core-Konformität", und keine andere Datenbank ist vollständig konform dazu). Eine Ausnahme ist die Behandlung von unquotierten Bezeichnern wie Tabellen- oder Spaltennamen. In PostgreSQL werden sie intern in Kleinbuchstaben umgewandelt, während der Standard vorschreibt, dass unquotierte Bezeichner in Großbuchstaben umgewandelt werden sollen. Also Foo äquivalent sein zu FOO nicht foo gemäß dem Standard entsprechen. Andere Unzulänglichkeiten betreffen das Fehlen von temporalen Tabellen, die eine automatische Protokollierung der Zeilenversionen während der Transaktionen mit der Möglichkeit des Durchsuchens in der Zeit (Prädikat FOR SYSTEM TIME) ermöglichen.

Benchmarks und Leistung

Es wurden viele informelle Leistungsstudien zu PostgreSQL durchgeführt. Die Leistungsverbesserungen zur Verbesserung der Skalierbarkeit begannen mit der Version 8.1. Einfache Benchmarks zwischen Version 8.0 und Version 8.4 zeigten, dass letztere bei reinen Lesevorgängen mehr als 10 Mal und bei Lese- und Schreibvorgängen mindestens 7,5 Mal schneller war.

Der erste Industriestandard- und Peer-validierte Benchmark wurde im Juni 2007 mit dem Sun Java System Application Server (proprietäre Version von GlassFish) 9.0 Platform Edition, dem UltraSPARC T1-basierten Sun Fire Server und PostgreSQL 8.2 durchgeführt. Dieses Ergebnis von 778,14 SPECjAppServer2004 JOPS@Standard lässt sich gut mit dem 874 JOPS@Standard mit Oracle 10 auf einem Itanium-basierten HP-UX-System vergleichen.

Im August 2007 legte Sun ein verbessertes Benchmark-Ergebnis von 813,73 SPECjAppServer2004 JOPS@Standard vor. Da das getestete System zu einem reduzierten Preis angeboten wurde, verbesserte sich das Preis/Leistungsverhältnis von 84,98 $/JOPS auf 70,57 $/JOPS.

Die Standardkonfiguration von PostgreSQL verwendet nur einen kleinen Teil des dedizierten Speichers für leistungsrelevante Zwecke wie das Zwischenspeichern von Datenbankblöcken und das Sortieren. Diese Einschränkung ist in erster Linie darauf zurückzuführen, dass ältere Betriebssysteme Änderungen am Kernel erforderten, um die Zuweisung großer Blöcke des gemeinsamen Speichers zu ermöglichen. PostgreSQL.org bietet in einem Wiki Ratschläge zu grundlegenden empfohlenen Leistungspraktiken.

Im April 2012 demonstrierte Robert Haas von EnterpriseDB die lineare CPU-Skalierbarkeit von PostgreSQL 9.2 anhand eines Servers mit 64 Kernen.

Matloob Khushi führte ein Benchmarking zwischen PostgreSQL 9.0 und MySQL 5.6.15 hinsichtlich ihrer Fähigkeit zur Verarbeitung genomischer Daten durch. In seiner Leistungsanalyse stellte er fest, dass PostgreSQL überlappende genomische Regionen achtmal schneller extrahiert als MySQL, wobei er zwei Datensätze mit jeweils 80.000 zufälligen menschlichen DNA-Regionen verwendete. Das Einfügen und Hochladen von Daten in PostgreSQL war ebenfalls besser, obwohl die allgemeine Suchfähigkeit beider Datenbanken fast gleichwertig war.

Plattformen

PostgreSQL ist für die folgenden Betriebssysteme verfügbar: Linux (alle aktuellen Distributionen), 64-Bit-x86-Installer verfügbar und getestet für macOS (OS X) Version 10.6 und neuer - Windows (mit verfügbaren und getesteten Installern für 64-Bit-Windows Server 2019 und 2016; einige ältere PostgreSQL-Versionen sind bis zu Windows 2008 R2 getestet, während für PostgreSQL Version 10 und älter ein 32-Bit-Installer verfügbar und bis zu 32-Bit Windows 2008 R1 getestet ist; kompilierbar mit z. z. B. Visual Studio, Version 2013 bis zur neuesten Version 2019) - FreeBSD, OpenBSD, NetBSD, AIX, HP-UX, Solaris und UnixWare; und nicht offiziell getestet: DragonFly BSD, BSD/OS, IRIX, OpenIndiana, OpenSolaris, OpenServer, und Tru64 UNIX . Die meisten anderen Unix-ähnlichen Systeme könnten ebenfalls funktionieren; die meisten modernen Systeme unterstützen sie.

PostgreSQL funktioniert auf jeder der folgenden Befehlssatzarchitekturen: x86 und x86-64 auf Windows XP (oder höher) und anderen Betriebssystemen; diese werden auch auf anderen Systemen als Windows unterstützt: IA-64 Itanium (externe Unterstützung für HP-UX), PowerPC, PowerPC 64, S/390, S/390x, SPARC, SPARC 64, ARMv8-A (64-Bit) und ältere ARM (32-Bit, einschließlich älterer wie ARMv6 im Raspberry Pi), MIPS, MIPSel und PA-RISC. Es war auch bekannt, dass es auf einigen anderen Plattformen funktioniert (obwohl es seit Jahren nicht mehr getestet wurde, d. h. für die neuesten Versionen).

Datenbank-Verwaltung

Open-Source-Frontends und -Werkzeuge für die Verwaltung von PostgreSQL sind vorhanden:

psql
Das primäre Front-End für PostgreSQL ist das psql Kommandozeilenprogramm, mit dem man SQL-Abfragen direkt eingeben oder aus einer Datei ausführen kann. Darüber hinaus bietet psql eine Reihe von Meta-Befehlen und verschiedene Shell-ähnliche Funktionen, um das Schreiben von Skripten und die Automatisierung einer Vielzahl von Aufgaben zu erleichtern; zum Beispiel die Tabulatorvervollständigung von Objektnamen und SQL-Syntax.
pgAdmin
Das pgAdmin-Paket ist ein freies und quelloffenes Verwaltungsprogramm mit grafischer Benutzeroberfläche (GUI) für PostgreSQL, das auf vielen Computerplattformen unterstützt wird. Das Programm ist in mehr als einem Dutzend Sprachen verfügbar. Der erste Prototyp mit dem Namen pgManager wurde für PostgreSQL 6.3.2 aus dem Jahr 1998 geschrieben und in späteren Monaten umgeschrieben und als pgAdmin unter der GNU General Public License (GPL) veröffentlicht. Die zweite Version (pgAdmin II) war eine komplette Neufassung und wurde am 16. Januar 2002 veröffentlicht. Die dritte Version, pgAdmin III, wurde ursprünglich unter der Artistic License und später unter der gleichen Lizenz wie PostgreSQL veröffentlicht. Im Gegensatz zu früheren Versionen, die in Visual Basic geschrieben waren, ist pgAdmin III in C++ geschrieben und verwendet das wxWidgets-Framework, so dass es auf den meisten gängigen Betriebssystemen laufen kann. Das Abfragetool enthält eine Skriptsprache namens pgScript zur Unterstützung von Verwaltungs- und Entwicklungsaufgaben. Im Dezember 2014 kündigte Dave Page, der Gründer und Hauptentwickler des pgAdmin-Projekts, an, dass mit der Verlagerung hin zu webbasierten Modellen die Arbeit an pgAdmin 4 begonnen hat, mit dem Ziel, Cloud-Einsätze zu erleichtern. Im Jahr 2016 wurde pgAdmin 4 veröffentlicht. Das Backend von pgAdmin 4 wurde in Python geschrieben und verwendet Flask und das Qt-Framework.
phpPgAdmin
phpPgAdmin ist ein webbasiertes Verwaltungstool für PostgreSQL, das in PHP geschrieben wurde und auf der beliebten phpMyAdmin-Schnittstelle basiert, die ursprünglich für die MySQL-Verwaltung geschrieben wurde.
PostgreSQL Studio
Das PostgreSQL Studio ermöglicht es Benutzern, grundlegende Entwicklungsaufgaben für PostgreSQL-Datenbanken über eine webbasierte Konsole auszuführen. Mit dem PostgreSQL Studio können Benutzer mit Cloud-Datenbanken arbeiten, ohne Firewalls öffnen zu müssen.
TeamPostgreSQL
AJAX/JavaScript-gesteuerte Webschnittstelle für PostgreSQL. Ermöglicht das Durchsuchen, Verwalten und Erstellen von Daten und Datenbankobjekten über einen Webbrowser. Die Schnittstelle bietet einen SQL-Editor mit Registerkarten und Autovervollständigung, Widgets für die Zeilenbearbeitung, Navigation mit Fremdschlüsseln zwischen Zeilen und Tabellen, Favoritenverwaltung für häufig verwendete Skripte und andere Funktionen. Unterstützt SSH sowohl für die Webschnittstelle als auch für die Datenbankverbindungen. Es gibt Installationsprogramme für Windows, Macintosh und Linux sowie ein einfaches plattformübergreifendes Archiv, das über ein Skript ausgeführt wird.
LibreOffice, OpenOffice.org
LibreOffice und OpenOffice.org Base können als Front-End für PostgreSQL verwendet werden.
pgBadger
Der pgBadger PostgreSQL Log Analyzer generiert detaillierte Berichte aus einer PostgreSQL Logdatei.
pgDevOps
pgDevOps ist eine Suite von Web-Tools, um mehrere PostgreSQL-Versionen, Erweiterungen und Community-Komponenten zu installieren und zu verwalten, SQL-Abfragen zu entwickeln, laufende Datenbanken zu überwachen und Leistungsprobleme zu finden.
Adminer
Adminer ist ein einfaches webbasiertes Administrationswerkzeug für PostgreSQL und andere Datenbanken, geschrieben in PHP.
pgBackRest
pgBackRest ist ein Sicherungs- und Wiederherstellungswerkzeug für PostgreSQL, das vollständige, differenzielle und inkrementelle Sicherungen unterstützt.
pgaudit
pgaudit ist eine PostgreSQL-Erweiterung, die ein detailliertes Session- und/oder Objekt-Audit-Logging über die von PostgreSQL bereitgestellte Standard-Logging-Funktion ermöglicht.
wal-e
Wal-e ist ein in Python geschriebenes Sicherungs- und Wiederherstellungswerkzeug für PostgreSQL, das Unterstützung für physische (WAL-basierte) Sicherungen bietet.

Eine Reihe von Unternehmen bieten proprietäre Werkzeuge für PostgreSQL an. Sie bestehen oft aus einem universellen Kern, der für verschiedene spezifische Datenbankprodukte angepasst wird. Diese Werkzeuge teilen meist die Verwaltungsfunktionen mit den Open-Source-Werkzeugen, bieten aber Verbesserungen bei der Datenmodellierung, beim Importieren, Exportieren oder Berichten.

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.

Bemerkenswerte Benutzer

Zu den bemerkenswerten Organisationen und Produkten, die PostgreSQL als primäre Datenbank verwenden, gehören:

  • Microsoft, verwendet für das Analyse-Dashboard "Release Quality View" (RQV) im Petabyte-Bereich, das die Qualität von Windows-Updates verfolgt und dabei 20.000 Arten von Metriken von über 800 Millionen Windows-Geräten analysiert.
  • Im Jahr 2009 nutzte die Social-Networking-Website Myspace die nCluster-Datenbank von Aster Data Systems für das Data Warehousing, die auf unmodifiziertem PostgreSQL basiert.
  • Geni.com verwendet PostgreSQL für seine wichtigste Genealogie-Datenbank.
  • OpenStreetMap, ein gemeinschaftliches Projekt zur Erstellung einer frei bearbeitbaren Karte der Welt.
  • Afilias, Domain-Registrierungsstellen für .org, .info und andere.
  • Sony Online, Multiplayer-Online-Spiele.
  • BASF, Einkaufsplattform für ihr Agrarwirtschaftsportal.
  • Reddit, soziale Nachrichten-Website.
  • Skype VoIP-Anwendung, zentrale Unternehmensdatenbanken.
  • Sun xVM, Suns Automatisierungssuite für Virtualisierung und Rechenzentren.
  • MusicBrainz, offene Online-Musik-Enzyklopädie.
  • Die Internationale Raumstation - zur Sammlung von Telemetriedaten in der Umlaufbahn und deren Übertragung auf den Boden.
  • MyYearbook, eine Website für soziale Netzwerke.
  • Instagram, ein mobiler Dienst zum Teilen von Fotos.
  • Disqus, ein Online-Diskussions- und Kommentierungsdienst.
  • TripAdvisor, eine Reiseinformations-Website mit überwiegend nutzergenerierten Inhalten.
  • Yandex, ein russisches Internetunternehmen, hat seinen Yandex.Mail-Dienst von Oracle auf Postgres umgestellt.
  • Amazon Redshift, Teil von AWS, ein spaltenbasiertes OLAP-System (Online Analytical Processing), das auf den Postgres-Modifikationen von ParAccel basiert.
  • National Oceanic and Atmospheric Administration's (NOAA) National Weather Service (NWS), Interactive Forecast Preparation System (IFPS), ein System, das Daten von NEXRAD-Wetterradaren, Oberflächen- und Hydrologiesystemen integriert, um detaillierte, lokalisierte Vorhersagemodelle zu erstellen.
  • Der nationale Wetterdienst des Vereinigten Königreichs, Met Office, hat damit begonnen, Oracle gegen PostgreSQL auszutauschen, um mehr Open-Source-Technologie einzusetzen.
  • WhitePages.com hatte bisher Oracle und MySQL verwendet, aber als es darum ging, seine Kernverzeichnisse intern zu verlagern, entschied man sich für PostgreSQL. Da WhitePages.com große Datenmengen aus verschiedenen Quellen kombinieren muss, war die Fähigkeit von PostgreSQL, Daten mit hoher Geschwindigkeit zu laden und zu indizieren, ein Schlüssel zur Entscheidung für PostgreSQL.
  • FlightAware, eine Website zur Flugverfolgung.
  • Grofers, ein Online-Lebensmittellieferdienst.
  • The Guardian ist 2018 von MongoDB auf PostgreSQL umgestiegen.
  • YugabyteDB implementiert die PostgreSQL-Abfrageebene als Standard-SQL-Modus.

Service-Implementierungen

Einige namhafte Anbieter bieten PostgreSQL als Software-as-a-Service an:

  • Heroku, ein Plattform-as-a-Service-Anbieter, unterstützt PostgreSQL seit dem Start im Jahr 2007. Sie bieten Mehrwertfunktionen wie das vollständige Datenbank-Rollback (die Möglichkeit, eine Datenbank zu einem beliebigen Zeitpunkt wiederherzustellen), das auf der von Heroku entwickelten Open-Source-Software WAL-E basiert.
  • Im Januar 2012 veröffentlichte EnterpriseDB eine Cloud-Version sowohl von PostgreSQL als auch von ihrem eigenen Postgres Plus Advanced Server mit automatischer Bereitstellung für Failover, Replikation, Lastausgleich und Skalierung. Sie läuft auf Amazon Web Services. Seit 2015 wird Postgres Advanced Server als ApsaraDB für PPAS angeboten, eine relationale Datenbank als Service auf der Alibaba Cloud.
  • VMware bietet seit Mai 2012 vFabric Postgres (auch vPostgres genannt) für private Clouds auf VMware vSphere an. Das Unternehmen kündigte das Ende der Verfügbarkeit (EOA) des Produkts im Jahr 2014 an.
  • Im November 2013 kündigte Amazon Web Services die Aufnahme von PostgreSQL in sein Angebot für relationale Datenbanken an.
  • Im November 2016 kündigte Amazon Web Services die Aufnahme von PostgreSQL-Kompatibilität in sein Cloud-natives Angebot Amazon Aurora Managed Database an.
  • Im Mai 2017 kündigte Microsoft Azure Azure Databases für PostgreSQL an.
  • Im Mai 2019 kündigte Alibaba Cloud PolarDB für PostgreSQL an.
  • Jelastic Multicloud Platform as a Service bietet seit 2011 Container-basierte PostgreSQL-Unterstützung. Sie bieten eine automatisierte asynchrone Master-Slave-Replikation von PostgreSQL auf dem Marktplatz an.
  • Im Juni 2019 kündigte IBM Cloud IBM Cloud Hyper Protect DBaaS für PostgreSQL an.
  • Im September 2020 kündigte Crunchy Data die Crunchy Bridge an.

Release-Historie

Versionsgeschichte
Veröffentlichung Erste Version Letzte Nebenversion Letzte Version Ende der
Lebensdauer
Meilensteine
6.0 1997-01-29 Erste formale Veröffentlichung von PostgreSQL, eindeutige Indizes, pg_dumpall-Dienstprogramm, Ident-Authentifizierung
6.1 1997-06-08 6.1.1 1997-07-22 Mehrspaltige Indizes, Sequenzen, Geld-Datentyp, GEQO (GEnetic Query Optimizer)
6.2 1997-10-02 6.2.1 1997-10-17 JDBC-Schnittstelle, Triggers, Server-Programmierschnittstelle, Constraints
6.3 1998-03-01 6.3.2 1998-04-07 2003-03-01 SQL-92 Subselect-Fähigkeit, PL/pgTCL
6.4 1998-10-30 6.4.2 1998-12-20 2003-10-30 VIEWs (dann nur schreibgeschützt) und RULEs, PL/pgSQL
6.5 1999-06-09 6.5.3 1999-10-13 2004-06-09 MVCC, temporäre Tabellen, mehr Unterstützung für SQL-Anweisungen (CASE, INTERSECT und EXCEPT)
7.0 2000-05-08 7.0.3 2000-11-11 2004-05-08 Fremdschlüssel, SQL-92-Syntax für Joins
7.1 2001-04-13 7.1.3 2001-08-15 2006-04-13 Vorausschauende Protokollierung, äußere Verknüpfungen
7.2 2002-02-04 7.2.8 2005-05-09 2007-02-04 PL/Python, OIDs nicht mehr erforderlich, Internationalisierung von Nachrichten
7.3 2002-11-27 7.3.21 2008-01-07 2007-11-27 Schema, Tabellenfunktion, vorbereitete Abfrage
7.4 2003-11-17 7.4.30 2010-10-04 2010-10-01 Optimierung von JOINs und Data-Warehouse-Funktionen
8.0 2005-01-19 8.0.26 2010-10-04 2010-10-01 Native Server auf Microsoft Windows, Savepoints, Tablespaces, Point-in-Time-Recovery
8.1 2005-11-08 8.1.23 2010-12-16 2010-11-08 Leistungsoptimierung, Zwei-Phasen-Commit, Tabellenpartitionierung, Index-Bitmap-Scan, Shared Row Locking, Rollen
8.2 2006-12-05 8.2.23 2011-12-05 2011-12-05 Leistungsoptimierung, Online-Indexerstellung, beratende Sperren, Warm-Standby
8.3 2008-02-04 8.3.23 2013-02-07 2013-02-07 Heap-only-Tupel, Volltextsuche, SQL/XML, ENUM-Typen, UUID-Typen
8.4 2009-07-01 8.4.22 2014-07-24 2014-07-24 Windowing-Funktionen, Berechtigungen auf Spaltenebene, parallele Datenbankwiederherstellung, datenbankspezifische Sortierung, gemeinsame Tabellenausdrücke und rekursive Abfragen
9.0 2010-09-20 9.0.23 2015-10-08 2015-10-08 Integrierte binäre Streaming-Replikation, Hot-Standby, In-Place-Upgrade-Fähigkeit, 64-Bit-Windows
9.1 2011-09-12 9.1.24 2016-10-27 2016-10-27 Synchrone Replikation, Sortierung pro Spalte, nicht protokollierte Tabellen, serialisierbare Snapshot-Isolierung, schreibbare gemeinsame Tabellenausdrücke, SELinux-Integration, Erweiterungen, fremde Tabellen
9.2 2012-09-10 9.2.24 2017-11-09 2017-11-09 Kaskadierende Streaming-Replikation, Nur-Index-Scans, native JSON-Unterstützung, verbessertes Lock-Management, Range-Typen, pg_receivexlog-Tool, Space-partitionierte GiST-Indizes
9.3 2013-09-09 9.3.25 2018-11-08 2018-11-08 Benutzerdefinierte Background Worker, Datenprüfsummen, dedizierte JSON-Operatoren, LATERAL JOIN, schnellerer pg_dump, neues pg_isready Server-Überwachungstool, Trigger-Funktionen, View-Funktionen, beschreibbare Fremdtabellen, materialisierte Views, Replikationsverbesserungen
9.4 2014-12-18 9.4.26 2020-02-13 2020-02-13 JSONB-Datentyp, ALTER SYSTEM-Anweisung zum Ändern von Konfigurationswerten, Möglichkeit zum Aktualisieren von materialisierten Ansichten ohne Blockieren von Lesevorgängen, dynamische Registrierung/Start/Stopp von Hintergrund-Worker-Prozessen, Logical Decoding API, GiN-Index-Verbesserungen, Unterstützung für Linux huge page, Neuladen des Datenbank-Caches über pg_prewarm, Wiedereinführung von Hstore als Spaltentyp der Wahl für dokumentenartige Daten.
9.5 2016-01-07 9.5.25 2021-02-11 2021-02-11 UPSERT, Sicherheit auf Zeilenebene, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS, und neuer BRIN-Index
9.6 2016-09-29 9.6.24 2021-11-11 2021-11-11 Unterstützung für parallele Abfragen, Verbesserungen des PostgreSQL Foreign Data Wrapper (FDW) mit Sort/Join Pushdown, mehrere synchrone Standbys, schnelleres Vakuumieren von großen Tabellen
10 2017-10-05 10.21 2022-05-12 2022-11-10 Logische Replikation, deklarative Tabellenpartitionierung, verbesserte Abfrageparallelisierung
11 2018-10-18 11.16 2022-05-12 2023-11-09 Erhöhte Robustheit und Leistung bei der Partitionierung, Unterstützung von Transaktionen in gespeicherten Prozeduren, erweiterte Fähigkeiten für Abfrageparallelität, Just-in-Time-Kompilierung (JIT) für Ausdrücke
12 2019-10-03 12.11 2022-05-12 2024-11-14 Verbesserungen bei der Abfrageleistung und der Speicherplatznutzung; Unterstützung von SQL/JSON-Pfadausdrücken; generierte Spalten; Verbesserungen bei der Internationalisierung und Authentifizierung; neue steckbare Tabellenspeicherschnittstelle.
13 2020-09-24 13.7 2022-05-12 2025-11-13 Platzeinsparungen und Leistungssteigerungen durch Deduplizierung von B-Tree-Indexeinträgen, verbesserte Leistung für Abfragen, die Aggregate oder partitionierte Tabellen verwenden, bessere Abfrageplanung bei Verwendung erweiterter Statistiken, parallelisiertes Leeren von Indizes, inkrementelles Sortieren
14 2021-09-30 14.4 2022-06-16 2026-11-12 Hinzufügen der SQL-Standardklauseln SEARCH und CYCLE für gängige Tabellenausdrücke, Ermöglichung des Hinzufügens von DISTINCT zu GROUP BY
15 15 Beta 2 2022-06-30
Legende:
Alte Version
Ältere Version, die noch gepflegt wird
Neueste Version
Neueste Vorschauversion
Zukünftige Version
Perl konnte nicht ausgeführt werden: /usr/bin/perl ist keine ausführbare Datei. Stelle sicher, dass $wgTimelinePerlCommand korrekt festgelegt ist.

Eigenschaften

  • Umfassendes Transaktionskonzept, das Multiversion Concurrency Control (MVCC) unterstützt
  • Ermöglicht komplexe Abfragen mit Unterabfragen (Subselects), auch geschachtelt
  • Referentielle Integrität (u. a. 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, u. a. C, C++, Object Pascal, Java/JDBC, Tcl, PHP, Perl, Python, Ruby sowie zu ODBC und .Net-Framework
  • Lauffähig auf vielen Unix-Plattformen, von Version 8.0 an auch nativ unter 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 Volltextsuche 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.

Preise und Auszeichnungen

An PostgreSQL wurden in der Vergangenheit zahlreiche Preise vergeben. Nicht zuletzt erhielt das Projekt den Lifetime Achievement Award im Rahmen der OSCON 2019.