Mit Version 9.3 verfügt PostgreSQL nun über die Möglichkeit, direkt dynamische reguläre Ausdrücke mit Hilfe eines speziellen Indexes zu beschleunigen.
Das Contrib-Modul
»pg_trgm
«
wurde in PostgreSQL 9.3 derart erweitert, dass es beliebige reguläre Ausdrücke über einen Index beantworten kann. Da es sich ebenfalls im Contrib-Zweig der Datenbank befindet, muss es über
»CREATE EXTENSION
«
nachinstalliert werden. Das
Listing 2
zeigt am Beispiel der Tabelle
»mails
«
, wie ein derartiger Index angelegt wird und einen Vergleich der Ausführungspläne mit und ohne Index.
Listing 2
Indizierte Regex
Die Unterschiede in den Kosten und Ausführungszeiten mit und ohne Index zeigen die deutlichen Vorteile in der Abfragegeschwindigkeit.
Mit der Version 9.3 unterstützt PostgreSQL nun auch das im SQL-Standard definierte LATERAL-Schlüsselwort. Das erlaubt es dem Entwickler, innerhalb von Verknüpfungen (Joins) mit Subselects aus diesen heraus andere Spalten oder Werte der Join-Operation zu referenzieren.
Ein einfaches Beispiel soll dies verdeutlichen: In der Regel ist es bisher in PostgreSQL nicht möglich, das Ergebnis eines Join-Partners als Funktionsargument einer Funktion zu verwenden. Bis PostgreSQL 9.2 liefert Listing 3 ein stark vereinfachtes Beispiel einer sogenannten Set Returning Function (SRF).
Listing 3
Set Returning Function
Interessant wird LATERAL insbesondere bei Verknüpfungspartnern wie Subselects. Für diese gilt diesselbe Regelung: Vorhergehende Verknüpfungspartner können mit LATERAL direkt in der Definition des Subselects referenziert werden. Hierbei ist das LATERAL-Schlüsselwort Pflicht, wie Listing 4 verdeutlicht.
Listing 4
LATERAL
Für komplexe Subqueries innerhalb von Verknüpfungen ist dies eine deutliche Erleichterung, allerdings sollte dies nicht dazu verleiten, Verknüpfungen als solche immer als Subqueries zu formulieren. Das vorhergehende Beispiel lässt sich beispielsweise recht einfach in einen herkömmlichen JOIN umschreiben.