PostgreSQL Leistungsmerkmale
SQL-Standard
PostgreSQl unterstützt den ANSI-SQL-Standard SQL92. Von den fünf Kategorien des SQL99-Standards, Framework, Foundation, Call Level Interface, Persistent Stored Modules und Host Language Bindings sind die Kategorien 1, 2 und 5 implementiert. Darüberhinaus bietet PostgreSQL eine Menge eigener Erweiterungen an, beispielsweise die Speicherung und Verarbeitung geometrischer Datentypen.
Mengenoperationen
Mengenoperationen auf einer oder mehreren Tabellen sind mit PostgreSQL ebenso machbar wie Subselects, Outer Joins oder Views. Mit den SQL Anweisungen UNION, INTERSECT, EXCEPT können Mengenoperationen auf mehreren Tabellen ausgeführt werden. Zeilen aus verschiedenen Tabellen können mit UNION vereinigt werden, mit INTERSECT bilden Sie den Mengendurchschnitt der Zeilen und mit EXCEPT die Mengendifferenz. Voraussetzung ist, dass die Datentypen der Felder in allen Zeilen übereinstimmen.
Subselects, Unterabfragen
Das sind Abfragen, die in eine andere Abfrage eingebettet sind. Sie ermöglichen komplexe Queries in einem Schritt. Subselects werden immer von innen nach außen abgearbeitet. Dabei werden die Zwischenergebnisse des Subselects an die jeweils übergeordnete Abfrage 'durchgereicht' und weiterverarbeitet.
Joins, Verbunde
Dabei werden SELECT-Kommandos über mehrere Tabellen ausgeführt. Grundlage von Joins ist das kartesische Produkt, das man sich als riesige Tabelle mit allen Spalten der verbundenen Tabellen vorstellen kann, die alle möglichen Kombinationen der Datensätze aller beteiligter Tabellen enthält. Diese Art des Verbundes nennt man CROSS-JOIN. In der Praxis werden meistens QUALIFIED JOINS benutzt, die eine Teilmenge des kartesischen Produkts beschreiben. Bei diesen Verbunden wird eine Beziehung der beteiligten Tabellen vorausgesetzt: Sie müssen mindestens ein Feld mit demselben Datentyp besitzen, über das der Verbund gebildet werden kann. Alle Verbund-Typen, die SQL99 spezifiziert, werden von PostgreSQL unterstützt.
Views, Sichten
Views (oder Sichten) sind gespeicherte SELECT-Abfragen. Sie werden bei jedem Aufruf neu generiert und reflektieren damit immer den aktuellen Zustand der darunterliegenden Tabellen. Views sind hervorragend geeignet, den Benutzern genau die Daten zur Verfügung zu stellen, die diese für ihre Arbeit brauchen. Zugriffsrechte für diese Views geben den Benutzern diese Daten frei und verbergen alle anderen Inhalte.
Trigger
Trigger sind Prozeduren, die im Datenbankserver gespeichert sind und beim Auftreten eines bestimmten Ereignisses ausgeführt werden. So können Sie jedesmal, wenn zum Beispiel ein INSERT- oder UPDATE-Kommando für eine bestimmte Tabelle ausgeführt wird, automatisch eine Funktion auslösen. Diese Triggerfunktion kann ihrerseits andere Datenbankoperationen ausführen, wie Zugriffe 'mitschreiben' oder andere Tabellen modifizieren. Diese Funktionen können in allen in PostgreSQL unterstützten prozeduralen Sprachen geschrieben sein.
Regeln
Mit Regeln kann das Verhalten von Abfragen modifiziert werden. Sie sind an die Tabelle und an das Ereignis gebunden, für das sie definiert wurden. Beispielsweise kann man bei Vorliegen bestimmter Bedingungen veranlassen, daß ein DELETE-Kommando in ein UPDATE-Kommando umformuliert wird oder man kann DELETE, INSERT, SELECT oder UPDATE-Kommandos ganz unterbinden.
Referentielle Integrität
Mit der Definition von Primär- und Fremdschlüsseln können Tabellen sich referenzieren. So werden die Beziehungen zwischen Tabellen auf die Datenbank abgebildet und das System kontrolliert selbständig die Korrektheit dieser Beziehungen. Wie dies realisiert wird, lesen Sie auf der Seite Referentielle Integrität.
Transaktionen
PostgreSQL unterstützt das ACID-Prinzip. Durch die Verwendung der fortschrittlichen MVCC-Technologie (Multi Version Concurrency Control). In PostgreSQL, müssen Lesezugriffe niemals auf Schreibzugriffe warten und umgekehrt. Wie MVCC funktioniert ist in den beiden (englischen) Artikeln "PostgreSQL's Multi-Version Concurrency Control" oder "PostgreSQL Ends the Waiting Game" beschrieben. Eine kurze Zusammenfassung gibt es auf der Seite Transaktionen.
Programmierung
Zur Programmierung von Client-Programmen bietet PostgreSQL Schnittstellen zu ODBC und JDBC sowie zu zahlreichen Programmiersprachen.
Stored Procedures
Das sind Funktionen, die in den unterschiedlichsten Programmiersprachen aber auch in SQL oder der PostgreSQL eigenen prozeduralen Programmiersprache Pl/pgSQL geschrieben werden können. Sie werden kompiliert und im Datenbankserver abgelegt, weshalb sie sehr schnell sind.
Objektrelationale Eigenschaften
PostgreSQL erlaubt die Speicherung nichtatomarer Datentypen in Arrays oder in geometrischen Datentypen. Beides sind Erweiterungen von PostgreSQL, die nicht im SQL-Standard enthalten sind. Alle Datenbankobjekte, ob Tabelle, View, Sequenz oder einzelner Datensatz haben in PostgreSQL eine eigene Objektidentität. Außerdem wird die Vererbung von Tabelleneigenschaften auf abgeleitete Kindtabellen unterstützt.
Erweiterbarkeit
Das Typsystem ist um eigene Datentypen, Operatoren und Funktionen erweiterbar, so dass das System individuell anpassbar ist. Funktionen können in SQL oder verschiedenen prozeduralen Sprachen geschrieben werden. Mit Pl/PgSQL steht eine eigene prozedurale Sprache zur Verfügung.
Large Objects
Binärdateien, zum Beispiel Sounddateien oder Bilder können in Tabellen gespeichert werden und entweder ganz oder in Teilen wieder ausgelesen werden. Zur Speicherung dieser Large Objects kann man zwischen zwei Datentypen wählen.
Indexe
PostgreSQL unterstützt unique-, partielle und funktionale Indexe. Seit der Version 8.1 können mehrere Indexe im Speicher zu Bitmaps verknüpftund von einem einzigen Index-Scan genutzt werden. Ausserdem sind GiST-Indexe (Generalized Search Tree) möglich, mit denen man die unterschiedlichsten Sortier- und Suchalgorithmen implementieren kann.