Datenbank PostgreSQL 15 Beta 1 hört auf den Befehl MERGE

Neben der neu eingeführten SQL-Anweisung erweitert die Open-Source-Datenbank die JSON/SQL-Funktionen und das Komprimieren von Backups.

Lesezeit: 4 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 31 Beiträge

(Bild: Shutterstock)

Von
  • Rainald Menge-Sonnentag

Planmäßig zum jährlichen Termin im Mai ist die erste Beta von PostgreSQL 15 erschienen. Das Release bringt einige neue Funktionen, allen voran die SQL-Anweisung MERGE. Für Backups kennt die quelloffene Datenbank nun zusätzliche Wege zum Komprimieren, und bei der logischen Replikation kann sie nach Spalten und Zeilen filtern.

Wie üblich bringt das Release einige Performance-Optimierungen mit. Version 15 soll unter anderem große Datensätze deutlich schneller sortieren. Das gilt vor allem, wenn die Größe jenseits des im Parameter work_mem gesetzten Wertes liegt, der die maximale Arbeitsspeichergröße für Query Workspaces angibt. Auch Fensterfunktionen, die row_number(), rank() oder count() verwenden, sollen performanter laufen. Das Aufräumen selektierter Listen von Duplikaten über SELECT DISTINCT arbeitet im aktuellen Release parallelisiert.

Der Befehl MERGE gehört seit SQL:2003 zum Standard der Datenbanksprache. Er dient zum Überführen mehrerer Zeilen aus einer Quelle in eine Tabelle und kann die Befehle INSERT, UPDATE und DELETE kombinieren.

MERGE INTO Ziel
USING Quelle
ON Bedingung
WHEN MATCHED THEN 
...
WHEN NOT MATCHED THEN 
...

Nach der Angabe des Ziels legt der nun in PostgreSQL eingeführte Befehl in ON eine Bedingung fest. Wenn sie erfüllt ist, gelten die Zeilen als übereinstimmend. Daraufhin legt WHEN MATCHED fest, was passiert, wenn die Bedingung erfüllt ist. Eine typische Folge ist ein UPDATE. Analog dazu bestimmt WHEN NOT MATCHED, wie die Datenbank mit Zeilen umgeht, die nicht im Ziel vorhanden sind. Dann könnte der Befehl sie über INSERT einfügen. Zusätzlich lässt sich eine Bedingung für das Löschen von Inhalten festlegen.

In PostgreSQL bis Version 14 ließ sich ein ähnliches Vorgehen nur mit Stored Procedures oder in eingeschränkter Form über INSERT .. ON CONFLICT umsetzen, das ein UPDATE als Konfliktbehandlung bei vorhandenen Zeilen definieren kann.

Das aktuelle Release bringt zudem erweiterte Funktionen für den SQL/JSON-Standard zum Arbeiten mit JSON-Inhalten in SQL-Datenbanken. Unter anderem kann PostgreSQL nun erstere mit der Funktion JSON_TABLE direkt in eine Tabelle überführen. Umgekehrt bietet sie neue Funktionen, um JSON-Daten zu generieren. Auch die Funktionen für Abfragen auf JSON-Inhalte erweitert das Release.

Im Bereich der regulären Ausdrücke bringt Version 15 ebenfalls einige Ergänzungen mit: regexp_count zählt die passenden Aufkommen und regexp_instr liefert die Position des n-ten Treffers zurück. regexp_like überprüft, ob ein regulärer Ausdruck in einem String vorhanden ist und gibt schlicht true oder false zurück. Schließlich gibt regexp_substr entweder den Teil einer Zeichenkette zurück, auf den der reguläre Ausdruck passt, oder NULL, falls es keine Übereinstimmung gibt.

Nachdem die Vorversion für Backups die LZ4-Komprimierung eingeführt hat, bietet PostgreSQL 15 zusätzlich Zstandard (zstd). Das Backup-Utility für Cluster pg_basebackup kann nun serverseitig mit Gzip, LZ4 oder zstd komprimieren.

Bei der logischen Replikation filtert das aktuelle Release auf Wunsch sowohl nach Zeilen als auch nach Spalten. Außerdem lassen sich neuerdings nicht nur alle Tabellen einer Datenbank, sondern auch alle Tabellen eines Schemas bereitstellen. Neu ist der Parameter disable_on_error, der das logische Replizieren bei einem Fehler abbricht. Darüber hinaus gibt es eine neue Anweisung für den Umgang mit Konflikten.

Weitere Neuerungen in PostgreSQL 15 unter anderem in den Bereichen Administration und Security lassen sich der Ankündigung entnehmen. Einen festen Termin für die endgültige Version hat das Team noch nicht bekannt gegeben. Die Betaphase dauert bei PostgreSQL üblicherweise etwa vier Monate, sodass im September oder Oktober mit dem Release zu rechnen sein dürfte.

(rme)