Der ADMIN 05/13 wirft einen Blick auf die frei verfügbaren Cloud-Frameworks von Eucalyptus über OpenNebula bis OpenStack. Gute Aussichten für skalierbare ... (mehr)

Indizierbare reguläre Ausdrücke

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.

LATERAL-Statement

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.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023