PostgreSQL: Das objektrelationale Datenbank-Managementsystem unter der Lupe

Müssen neben alphanumerischen (Buchstaben, Zahlen, Sonderzeichen) auch komplexe Datentypen oder multimediale Inhalte verwaltet werden sollen, stoßen klassische relationale Datenbank-Managementsysteme schnell an ihre Grenzen. Doch objektrelationale Datenbanken bzw. Datenbank-Managementsysteme, die das traditionelle Modell um objektorientierte Ansätze erweitern, liefern die passende Antwort auf diese Problematik: Durch objektrelationale Abbildungen (engl. object-relational mapping) ermöglichen diese es nämlich, Objekte mithilfe von Anwendungen auf Basis objektorientierter Programmiersprachen auch in relationalen Systemen abzulegen. Eine der in diesem Zusammenhang beliebtesten und zugleich ältesten Lösungen ist die Open-Source-Datenbank PostgreSQL, die auch unter dem Namen Postgres bekannt ist.

Was ist PostgreSQL?

PostgreSQL blickt auf eine über 30-jährige Entwicklungshistorie zurück. Seinen Ursprung hat das objektrelationale Datenbank-Managementsystem (ORDBMS) dabei in dem POSTGRES-Projekt der University of California in Berkeley. Das wurde bereits 1986 unter der Führung von Michael Stonebraker gestartet und unter anderem von der Defense Advanced Research Project Agency (DARPA) und der National Science Foundation (NSF) gesponsert. 1994 erweiterten die Studenten Andrew Yu und Jolly Chen den Basiscode um einen SQL-Interpreter, woraufhin man diese neue und rund 30 bis 50 Prozent schnellere Abwandlung unter dem Namen Postgres95 als Open-Source-Lösung freigab (unter eigener Lizenz, die den BSD- und MIT-Lizenzen ähnelt). Zwei Jahre später erhielt die Datenbankanwendung mit Version 6.0 den bis heute gültigen Namen PostgreSQL.

Hinweis

Neben dem neuen Namen PostgreSQL wird weiterhin auch der ursprüngliche Name Postgres (mittlerweile nur sehr selten komplett in Großbuchstaben geschrieben) für das Datenbanksystem verwendet. Außer durch eine gewisse Nostalgie lässt sich das schlicht auch dadurch erklären, dass die Aussprache von Postgres einfacher ist.

Das POSTGRES-Projekt leistete wertvolle Pionierarbeit und erarbeitete zahlreiche Konzepte, die erst wesentlich später Einzug in andere (und hauptsächlich kommerzielle) Datenbankensysteme fanden. Letztlich zeichnet sich PostgreSQL nicht nur als SQL-konforme Datenbank, sondern auch durch folgende moderne Features aus:

  • Möglichkeit komplexer Abfragen
  • Fremdschlüssel (Foreign Keys) zur Verknüpfung von Daten zweier Tabellen
  • Trigger, die bei Input automatisch ausgelöst werden und diesen überpüfen, bestätigen, ändern, löschen oder wahlweise Referenzdaten einsetzen
  • aktualisierbare Ansichten
  • umfassendes Transaktionskonzept
  • Multiversion Concurrency Control (MVCC) zur effizienten Ausführung gleichzeitiger Datenbankzugriffe

Benutzer können PostgreSQL darüber hinaus dank der freien Lizenzierung hochgradig modifizieren und erweitern und auf diese Weise beispielsweise neue Datentypen, Funktionen, Operatoren, Indexierungsmethoden oder prozedurale Sprachen (Programmiersprachen zum Schreiben von Funktionen und Triggern) hinzufügen.

Postgres: Eckdaten und Systemvoraussetzungen

Die Flexibilität von PostgreSQL zeigt sich nicht nur im Bereich der Funktionalität und Erweiter- und Anpassbarkeit – auch hinsichtlich des Soft- und Hardware-Setups gewährt die Datenbank reichlich Spielraum. So ist Postgres in den meisten UNIX/Linux-Distributionen bereits von Werk an enthalten und wird von Apple seit Mac OS X Lion (10.7) als Standarddatenbank ausgeliefert. Einzige Voraussetzung ist, dass eine aktuelle gmake-Version (3.80 oder höher) installiert ist (in den fertigen Binärdateien schon enthalten). Auch Windows-Betriebssysteme sind dank entsprechender Installationspakete als Plattform für das System wählbar. Die erforderliche Rechenleistung und Speicherkapazität hängen lediglich von der Größe des geplanten Datenbanksystems ab – die Open-Source-Software selbst benötigt nur knapp 20 MB.

Dass man in der Praxis eher durch die eigenen Speicherkapazitäten als durch die Grenzen von PostgreSQL eingeschränkt wird, verdeutlichen die folgenden Eckdaten der objektrelationalen Datenbank:

Maximale Datenbankgröße

unbegrenzt

Maximale Größe einer Tabelle

32 Terabyte

Maximale Größe eines Datensatzes

1,6 Terabyte

Maximale Größe eines Feldes

1 Gigabyte

Maximale Anzahl an Spalten

je nach Datentyp 250 bis 1.600

Maximale Anzahl an Zeilen

unbegrenzt

Maximale Anzahl an Indexen

unbegrenzt

Wie funktioniert PostgreSQL?

Postgres basiert auf dem typischen Client-Server-Modell: Die zentrale Serverkomponente mit dem Namen „postmaster“ verwaltet sämtliche Datenbankdateien sowie alle Verbindungen, die zwecks Kommunikation (In- und Output) mit dem Datenbankserver aufgebaut werden. Nutzer benötigen für den Verbindungsaufbau lediglich ein passendes Client-Programm, wobei das PostgreSQL-Softwarepaket mit psql bereits eine native Lösung zur Bedienung über die Kommandozeile bzw. das Terminal integriert hat. Alternativ kann man auf verschiedene Anwendungen mit grafischer Benutzeroberfläche ausweichen – wie beispielsweise pgAdmin oder phpPgAdmin, die sich optional installieren und nutzen lassen. Bei interaktiven Websites übernimmt in der Regel der Webserver die Rolle des Clients.

Tipp

Viele Linux-Distributionen liefern mit pgAccess einen eigenen grafischen Postgres-Client mit.

Für welche Projekte ist PostgreSQL geeignet?

Als bewährtes und äußerst flexibles Datenbank-Managementsystem kommt Postgres in zahlreichen Branchen und Szenarien zum Einsatz. Die objektrelationale Datenbank zeichnet sich dabei als erstklassige Basis aus, um die verschiedensten Anwendungen sicher zu betreiben. So bildet das Open-Source-Projekt aufgrund des integrierten Transaktionskonzepts und der Unterstützung von MVCC (Multiversion Concurrency Control: Verfahren zur effizienten Aufführung konkurrierender Zugriffe) beispielsweise die perfekte Lösung für Onlinebanking-Software. Auch Analyseprogramme wie Matlab oder R harmonieren mit der Datenbank, weshalb PostgreSQL auch oft in Kombination mit diesen Programmen genutzt wird. In Kombination mit der Erweiterung PostGIS, die Hunderte von Funktionen zur Arbeit mit Geodaten zur Verfügung stellt, überzeugt Postgres zudem auch bei der Arbeit mit räumlichen und geografischen Daten.

Auch als Lösung für Webprojekte ist PostgreSQL gefragt: Das objektrelationale System funktioniert mit diversen modernen Frameworks wie Django, Node.js oder Ruby on Rails und unterstützt die klassischen Websprachen wie PHP. Dank der Unterstützung von synchroner und asynchroner Replikation lassen sich die gespeicherten Daten zudem leicht auf mehrere Server verteilen, um eine hohe Ausfallsicherheit und minimale Zugriffszeit auf wichtige Daten zu ermöglichen.

Hinweis

Die gute Unterstützung von JSON macht PostgreSQL auch zu einer exzellenten Datenbanklösung, um NoSQL-Workloads zu skalieren.

So funktioniert die PostgreSQL-Installation

Wer Postgres für sein Projekt nutzen möchte, der kann das Datenbank-Managementsystem in wenigen Schritten selbst installieren, ohne eine Lizenz oder Ähnliches erwerben zu müssen. Im Download-Portal der offiziellen PostgreSQL-Homepage stehen zu diesem Zweck Binärdateien sowie Links zu den Repositorys der Quellpakete für BSD, Linux, macOS, Solaris und Windows zur Verfügung, die man im Rahmen der Open-Source-Lizenz kostenfrei installieren und nutzen darf. Root-Rechte werden hierfür nicht benötigt: Einfache Administrator-Rechte sind für die Ausführung vollkommen ausreichend. Beispielhaft zeigen wir in den beiden folgenden Abschnitten, wie die PostgreSQL-Installation unter Linux (Ubuntu 17.10) und Windows funktioniert.

PostgreSQL unter Linux (Ubuntu 17.10) installieren

Das apt-Repository von Postgres unterstützt offiziell die LTS-Versionen von Ubuntu (ab 14.04) sowie einige andere – wie beispielsweise Ubuntu 17.04. Zudem funktionieren die Quellpakete häufig auch bei anderen Versionen. Das PostgreSQL-Team empfiehlt aber, eine möglichst aktuelle LTS-Variante zu verwenden, damit Anwender langfristig den bestmöglichen Nutzen aus dem Datenbank-Managementsystem ziehen können. Da die Pakete unter Ubuntu bereits im Standard-Repository enthalten sind, lassen sich diese bequem mit dem Paketmanager apt installieren:

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

PostgreSQL wird durch diesen Befehl installiert, wobei die Software automatisch den Linux-Nutzer mit dem Namen „postgres” für den Datenbankzugriff anlegt. Aus Sicherheitsgründen sollte dieser lediglich für die Arbeit mit der Datenbank genutzt werden. Außerdem ist es empfehlenswert, dieses Profil im ersten Schritt mit einem Passwort zu versehen (standardmäßig ist keines eingetragen). Hierfür muss man lediglich den folgenden Befehl und anschließend zwei Mal das Kennwort der Wahl eingeben:

sudo passwd postgres

Parallel zu dem Linux-User „postgres“ existiert der gleichnamige Datenbank-User, der für die Administration der Datenbank benötigt wird und ebenfalls ein starkes Passwort erhalten sollte. Das gelingt durch die Eingabe folgender Terminal-Befehle („neues-passwort“ ist dabei Platzhalter für das gewünschte Kennwort und entsprechend zu ersetzen):

su - postgres
psql -d template1 -c "ALTER USER postgres WITH PASSWORD 'neues-passwort';"

Um zu überprüfen, ob die Installation erfolgreich war, sollte man mit dem „postgres“-Linux-Account testweise eine Datenbank (hier: testdb) anlegen und mit dem Terminal-Client psql ansteuern:

su - postgres
createdb testdb
psql testdb

Im Terminal sieht man dann diesen Output der psql-Client-Shell, die sich mit beliebigen SQL-Kommandos bedienen lässt:

PostgreSQL unter Windows installieren

Die Installation von Postgres auf Windows-Rechnern geht dank des interaktiven durch EnterpriseDB zertifizierten Installers leicht von der Hand: Der kostenfreie Installationshelfer des Softwareherstellers, der Zusatztools sowie kommerziellen Support für PostgreSQL anbietet, wird von selbigem auf der firmeneigenen Homepage zum Download zur Verfügung gestellt. Es gilt lediglich, die gewünschte Version des Datenbank-Managementsystems sowie die Zielplattform auszuwählen und anschließend auf „DOWNLOAD NOW“ zu klicken:

Der heruntergeladene Installer lässt sich per Doppelklick starten und installiert im ersten Schritt den Microsoft-Compiler Visual C++, sofern dieser noch nicht auf dem System eingerichtet ist. Danach wählt man den Speicherort für PostgreSQL und hat die Möglichkeit, einzelne Komponenten des Installationspakets von der Installation auszuschließen. In jedem Fall werden der PostgreSQL-Server und die Command-Line-Tools benötigt – der grafische Client pgAdmin sowie der Stack Builder (für einfache Downloads und Installationen von Erweiterungen) sind nicht zwingend erforderlich, erleichtern die Arbeit mit dem Datenbank-Managementsystem aber enorm.

Wurde auch der Speicherort für die Daten angegeben, steht noch die Vergabe eines Passworts für das Datenbank-Administrator-Profil „postgres“ aus. Die vorgegebenen Port- und Lokalisierungseinstellungen kann man unverändert beibehalten, bevor man die Installation im letzten Schritt endgültig startet.

Nach erfolgreicher Installation lässt sich über die Benutzeroberfläche von pgAdmin (sofern mitinstalliert) in wenigen Schritten eine Verbindung zum PostgreSQL-Server aufbauen. Zu diesem Zweck wählt man die eingerichtete Postgres-Version in der Server-Auflistung per Rechtsklick aus und drückt anschließend auf „Connect Server“.

Nach Eingabe des zuvor vergebenen Passworts für den Administrator-Account „postgres“ initiiert der Client die Verbindung.

Die Vor- und Nachteile von PostgreSQL im tabellarischen Überblick

Vorteile

Nachteile

Open Source

Nicht bei allen Hostern standardmäßig verfügbar

Hochgradig erweiterbar

Ausbaufähige und lediglich englischsprachige Dokumentation

Zum großen Teil konform mit SQL-Standard

Vergleichsweise geringe Lesegeschwindigkeit

Verarbeitung komplexer Datentypen möglich (z. B. Geodaten)

Flexible Volltextsuche

Erstellung eigener Funktionen, Trigger, Datentypen etc. möglich

Gute Sprachunterstützung (Python, Java, Perl, PHP, C, C++ etc.)

Unterstützt JSON

Plattformübergreifend