Mit PostgreSQL 19 steht das nächste Major Release in den Startlöchern. Aktuell befindet sich das Release noch in der Beta 3, dennoch lässt sich bereits erkennen, welche Schwerpunkte die Entwickler:innen gesetzt haben. Im Gegensatz zu früheren Versionen konzentriert sich PostgreSQL 19 auf die Weiterentwicklung bestehender Funktionen. Verbesserungen bei Wartung, Replikation, SQL und Performance sollen den Betrieb produktiver Datenbanken vereinfachen.
In diesem Blog-Beitrag wird ein Auszug der neuen Features beschrieben. Für mehr Details zu allen Neuerungen können die offiziellen Release Notes angeschaut werden.
REPACK wird Teil des Datenbankkerns
Eine der wichtigsten Neuerungen ist die Integration des neuen REPACK-Befehls. Bislang konnten Tabellen zwar mit VACUUM bereinigt werden, der belegte Speicherplatz wurde dadurch jedoch nicht an das Betriebssystem zurückgegeben. Für eine vollständige Reorganisation waren VACUUM FULL, CLUSTER oder Erweiterungen wie pg_repack erforderlich.
Mit PostgreSQL 19 steht diese Funktionalität nun direkt im Datenbankkern zur Verfügung. Besonders interessant ist REPACK CONCURRENTLY, das Tabellen im Hintergrund reorganisiert und dabei Lese- und Schreibzugriffe weitgehend zulässt. Lediglich für den abschließenden Austausch der Tabellen ist eine kurze Sperre notwendig. Gerade für produktive Systeme mit großen Tabellen reduziert dies Wartungsfenster erheblich.
Mehr Flexibilität bei Partitionierung und Replikation
Auch die Partitionierung wurde weiter verbessert. Partitionen können künftig zusammengeführt oder aufgeteilt werden, sodass sich einmal gewählte Partitionierungsstrategien einfacher an veränderte Datenmengen oder Aufbewahrungsfristen anpassen lassen. Ein kurzes Beispiel zeigt, wie sich Partitionen künftig zusammenführen und aufteilen lassen:
Darüber hinaus entwickelt PostgreSQL die logische Replikation konsequent weiter. Eine wesentliche Neuerung ist die Synchronisation von Sequenzen zwischen Publisher und Subscriber. Dadurch lassen sich Migrationen und Replikationsszenarien einfacher umsetzen, da automatisch erzeugte Schlüsselwerte konsistent bleiben. Ergänzend wurden Publications flexibler gestaltet und das Verhalten bei der Verwaltung von Subscriptions verbessert.
Verbesserungen für Wartung und Administration
Auch Autovacuum wurde weiterentwickelt. Durch parallele Worker können größere Tabellen künftig effizienter verarbeitet werden.
ALTER SYSTEM SET autovacuum_max_parallel_workers = 4;
Gleichzeitig liefert PostgreSQL zusätzliche Monitoring-Informationen, die Wartungsprozesse transparenter machen und Administrator:innen einen besseren Einblick in die automatischen Hintergrundprozesse geben.
Neue Funktionen für Entwickler:innen
Mit SQL/PGQ unterstützt PostgreSQL erstmals standardisierte Graphabfragen. Dadurch lassen sich relationale Daten auch als Graph analysieren, ohne dass dafür eine separate Graphdatenbank erforderlich ist.
Um dies zu verwenden, wird über CREATE PROPERTY GRAPH definiert, wie die bestehenden relationalen Tabellen als Knoten (Vertices) und Kanten (Edges) interpretiert werden sollen. Im folgenden Beispiel wird mit Hilfe einer User-Tabelle sowie einer Follower-Tabelle ein Graph abgebildet. Dabei bilden die User die Knoten und die Follower-Beziehungen die Verknüpfungen zwischen den Usern:
Sobald der Graph definiert ist, können die User und deren Beziehungen über die neue GRAPH_TABLE-Funktion abgefragt werden. Die Abfrage nutzt den definierten Graphen (social_graph) sowie die vergebenen Labels für die Knoten (person) und Kanten (follows):
Als Ergebnis liefert diese Abfrage für jede 'Follows'-Beziehung im Graphen eine Zeile mit dem Namen der/des Follower:in (person_a) und dem Namen der gefolgten Person (person_b).
Außerdem wurde die SQL-Sprache um Komfortfunktionen erweitert. GROUP BY ALL vereinfacht Aggregatabfragen, Window-Funktionen erhalten einen verbesserten Umgang mit NULL-Werten. Die Window-Funktionen LAG, LEAD, FIRST_VALUE, LAST_VALUE und NTH_VALUE unterstützen jetzt die Klausel IGNORE NULLS. Damit lassen sich NULL-Werte beim Durchlaufen des Fensters überspringen. Bislang musste man dafür auf Unterabfragen zurückgreifen. Auch der COPY-Befehl wurde ausgebaut. So lassen sich Daten beispielsweise einfacher importieren oder direkt im JSON-Format exportieren.
Wie viel Tipparbeit diese Komfortfunktionen im Alltag ersparen, zeigt sich besonders bei GROUP BY ALL:
Zusätzlich bringt PostgreSQL 19 ein weiteres Highlight für die Applikationsentwicklung: INSERT … ON CONFLICT DO SELECT RETURNING. Diese Neuerung beim „Upsert“ erlaubt es, bei einem auftretenden Konflikt die bereits existierenden Zeilen als Ergebnis direkt zurückzugeben und optional mit FOR UPDATE/SHARE für weitere Transaktionen zu sperren:
Performance-Optimierungen
Neben den sichtbaren Neuerungen enthält PostgreSQL 19 zahlreiche Verbesserungen im Hintergrund. Der Query Planner wurde an verschiedenen Stellen optimiert und kann Abfragen in bestimmten Fällen effizienter ausführen. Zusätzlich profitieren unter anderem Join-Operationen, Fremdschlüsselprüfungen und Datenimporte von weiteren Optimierungen.
Fazit
PostgreSQL 19 bringt keine einzelne spektakuläre Neuerung mit, überzeugt aber durch die Vielzahl an Verbesserungen im Detail. Auch wenn sich PostgreSQL 19 derzeit noch in der Beta-Phase befindet, lohnt sich bereits jetzt ein Blick auf die neue Version.
Weitere Informationen zu PostgreSQL gibt es in unserem Seminar „PostgreSQL - Administration“.
Seminarempfehlung
POSTGRESQL ADMINISTRATION – GRUNDLAGEN [DB-PG-01]
Mehr erfahren