Datenbank PostgreSQL 15 führt endlich MERGE ein

Neben dem fast überfälligen Kombibefehl MERGE bringt die Open-Source-Datenbank Erweiterungen für die logische Replikation und für JSON-Inhalte.

In Pocket speichern vorlesen Druckansicht 68 Kommentare lesen

(Bild: Shutterstock)

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Nach einer fünfmonatigen Betaphase ist PostgreSQL 15 nun allgemein verfügbar. Bei den neuen Funktionen ist vor allem die SQL-Anweisung MERGE nennenswert. Außerdem bringt die Open-Source-Datenbank Ergänzungen der logischen Replikation, für reguläre Ausdrücke und für JSON-Inhalte mit.

Der Befehl MERGE dient zum Überführen mehrerer Zeilen aus einer Quelle in eine Tabelle. Er kann die Befehle INSERT, UPDATE und DELETE kombinieren. Im SQL-Standard ist er seit SQL:2003 zu finden.

Zum Start definiert MERGE das Ziel mit INTO und die Quelle mit USING. Danach legt ON eine Bedingung fest. Wenn diese erfüllt ist, gelten die Zeilen als übereinstimmend. Daraufhin gibt WHEN MATCHED an, 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:

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

Zusätzlich lässt sich eine Bedingung für das Löschen von Inhalten festlegen. Bisher ließ sich in PostgreSQL ein ähnliches Vorgehen zum MERGE-Befehl nur mit Stored Procedures oder in eingeschränkter Form über INSERT .. ON CONFLICT umsetzen, das ein UPDATE als Konfliktbehandlung bei vorhandenen Zeilen definieren kann.

Die logische Replikation bietet neuerdings erweiterte Optionen, um nur eine Auswahl zu replizieren. Dafür führt PostgreSQL 15 das Filtern nach Zeilen ein, und im Befehl CREATE PUBLICATION lässt sich neuerdings eine Liste der zu übertragenden Spalten angeben. Außerdem erweitert das Release die Einstellungen für den Umgang mit Konflikten.

Neu ist der Parameter disable_on_error, der das logische Replizieren bei einem Fehler abbricht. Außerdem lassen sich neuerdings nicht nur alle Tabellen einer Datenbank, sondern auch alle Tabellen eines Schemas bereitstellen.

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.

Nennenswert ist zudem, dass User aus Sicherheitsgründen im public beziehungsweise Default-Schema keine Tabellen mehr mit CREATE erzeugen dürfen.

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.

Weitere Neuerungen in PostgreSQL 15 lassen sich der Ankündigung entnehmen. Eine detaillierte Aufführung der Änderungen steht in den Release Notes. Binaries und der Link zum Sourcecode finden sich auf der Download-Seite.

Update

Der Absatz zur JSON-Implementierung wurde herausgenommen, da JSON_TABLE zwar in der Beta vorhanden war, es aber doch nicht in das GA-Release geschafft hat.

(rme)