Keine hässlichen Joins mehr: Native Graph-Abfragen sind da
Postgres 19 lässt eine Bombe platzen: native Unterstützung für SQL/PGQ (Property Graph Queries). Dies ist nicht nur ein Upgrade; es ist ein grundlegender Wandel, der es Ihnen ermöglicht, standardmäßige relationale Tabellen mithilfe einer intuitiven Graph-Traversal-Syntax abzufragen. Vergessen Sie die Zeiten, in denen Sie sich mit Multi-Table-JOIN-Ketten quälen mussten; Ihre Datenbeziehungen haben gerade eine ernsthafte Überarbeitung der Benutzerfreundlichkeit erfahren.
Schalten Sie diese Leistung mit CREATE PROPERTY GRAPH frei, indem Sie eine logische Graph-Ebene direkt über Ihrem bestehenden Schema definieren. Sie bestimmen Tabellen als Vertices – die Kerndatenknoten wie customers oder products – und Join-Tabellen als Edges, die kritischen Verbindungen wie customer_orders oder order_items. Entscheidend ist, dass dieses Setup Ihre zugrunde liegende Datenstruktur unberührt lässt; es ist eine Ansicht, keine Migration.
Diese elegante Abstraktion vereinfacht Abfragen drastisch, die zuvor eine lange, fehleranfällige Kaskade von JOIN-Anweisungen erforderten. Stellen Sie sich vor, Sie entwirren die gesamte Kaufhistorie eines Kunden über fünf Tabellen; dieses komplexe SQL-Chaos verwandelt sich nun in eine optimierte, lesbare Graph-Traversal. Für Entwickler bedeutet dies einfacher zu schreibenden, leichter zu lesenden und einfacher zu wartenden Code, was sich direkt auf die Produktivität auswirkt und die Abfragekomplexität reduziert.
Das atomare 'Get-or-Create', das wir uns immer gewünscht haben
Entwickler haben lange mit dem "Get-or-Create"-Dilemma bei Datenbankinteraktionen gerungen. Vor Postgres 19 erforderte das Erreichen dieses gängigen Musters zwei separate Abfragen: einen INSERT-Versuch, gefolgt von einem SELECT, falls das Einfügen aufgrund eines Konflikts fehlschlug. Dieser zweistufige Tanz führte zu Race Conditions und erforderte komplexe Logik auf Anwendungsebene – ein schwerfälliger, fehleranfälliger Prozess.
Jetzt, mit Postgres 19, ändert sich das Spiel. Die neue ON CONFLICT DO SELECT-Anweisung liefert die atomare "Get-or-Create"-Operation, die wir uns immer gewünscht haben. Diese einzelne, elegante Abfrage garantiert, dass Sie entweder eine neue Zeile einfügen oder, falls ein Konflikt auftritt, nahtlos die bestehende zurückgeben, wodurch Race Conditions ohne komplexe Anwendungslogik oder explizite Transaktionsblöcke eliminiert werden.
Diese Funktion ist ein Segen für kritische Workflows mit hohem Volumen. Denken Sie an das Erstellen von Benutzerkonten, das Hinzufügen eindeutiger Tags zu Inhalten oder das Verarbeiten idempotenter API-Anfragen, ohne Angst vor doppelten Einträgen haben zu müssen. ON CONFLICT DO SELECT macht Ihren Code sauberer, robuster und deutlich performanter, sodass sich Entwickler auf Funktionen konzentrieren können, statt auf defensive Datenbankprogrammierung.
Verschwendeten Speicherplatz zurückgewinnen, ohne Ausfallzeiten
Postgres war schon immer ein Arbeitstier für Daten, aber sein Ansatz für UPDATE- und DELETE-Operationen schuf ein heimtückisches Problem: Table Bloat. Jede Änderung hinterlässt tote Zeilen, und obwohl VACUUM diesen Speicherplatz als wiederverwendbar markiert, gibt es ihn nie tatsächlich an das Betriebssystem zurück. Entwickler blieben auf einer ständig wachsenden Festplattennutzung sitzen, eine stille Steuer auf ihre Infrastruktur.
Postgres 19 liefert endlich eine integrierte Lösung: den neuen REPACK-Befehl. Dies ist nicht nur eine kleine Optimierung; es ist ein direkter Angriff auf Bloat, bei dem die gesamte Tabelle und ihre zugehörigen Indizes in eine neue, kompakte Datei umgeschrieben werden. Das bedeutet eine tatsächliche Rückgewinnung von Festplattenspeicher, ein echter Gewinn für jeden, der große Datenbanken verwaltet.
Entscheidend ist, dass REPACK die lähmende exklusive Tabellensperre vermeidet, die VACUUM FULL für Produktionssysteme unbrauchbar machte. Mit der Option CONCURRENTLY können Anwendungen weiterhin ungehindert Daten lesen und schreiben, während der Vorgang läuft. Dies macht Drittanbieter-Erweiterungen wie pg_repack überflüssig und vereinfacht die Datenbankwartung erheblich.
Bevor Sie zu laut feiern, beachten Sie den Haken: REPACK erfordert genügend freien Speicherplatz, um vorübergehend eine zweite Kopie der Tabelle und aller ihrer Indizes zu speichern. Es ist ein kleiner Preis für die Rückgewinnung von verschwendetem Speicherplatz ohne Ausfallzeiten. Weitere Details zu den kommenden Funktionen finden Sie in der offiziellen Ankündigung: PostgreSQL 19 Beta 1 Released!.
Gefällt Ihnen der Artikel? Erhalten Sie jeden Morgen einen wie diesen per E-Mail.
eine E-Mail pro Tag · Abmeldung mit zwei Klicks · kein Tracking durch Dritte
Eine Blitzrunde an Erfolgen für Entwickler & DBAs
Postgres 19 liefert eine Reihe taktischer Vorteile für Entwickler und DBAs, die Arbeitsabläufe rationalisieren und die Leistung stärken. Ein herausragendes Merkmal ist PG_PLAN_ADVICE, ein neues Modul zur Stabilisierung der Abfrageausführung. Es ermöglicht Ihnen, einen schnellen Abfrageplan zu erfassen und zu "fixieren", wodurch verhindert wird, dass der Planer suboptimale Entscheidungen trifft, die die Leistung im Laufe der Zeit beeinträchtigen können. Keine mysteriösen Verlangsamungen mehr nach einem Upgrade oder einer Datenverschiebung.
Die Ergonomie für Entwickler wird deutlich verbessert. Sie müssen nicht mehr mühsam jede nicht aggregierte Spalte aus Ihrer SELECT-Liste in der GROUP BY-Klausel wiederholen – eine lang erwartete Vereinfachung, die SQL übersichtlicher macht. Zusätzlich unterstützt der COPY-Befehl nun direkt den Export von Daten nach JSON, eine kleine, aber bedeutende Verbesserung der Lebensqualität für Dateningenieure.
Auch die Wartungsleistung erfährt erhebliche Upgrades. VACUUM-Operationen, die für die Rückgewinnung von totem Speicherplatz entscheidend sind, nutzen jetzt parallele Worker für die Indexbereinigung. Dies bedeutet weniger Ausfallzeiten und schnellere Wartungszyklen für große Tabellen, ein direkter Angriff auf einen der historischen Schwachpunkte von Postgres.
Schließlich wird die JIT-Kompilierung auf Opt-in umgestellt und ist nun standardmäßig deaktiviert. Frühere Versionen aktivierten JIT oft für Abfragen, die davon nicht profitierten, was aufgrund unzuverlässiger Kostenschätzungen manchmal sogar zu Leistungseinbußen führte. Die standardmäßige Deaktivierung stellt sicher, dass sie nur dann eingreift, wenn sie explizit für geeignete, rechenintensive Abfragen konfiguriert ist, was die allgemeine Systemleistung schützt.
Häufig gestellte Fragen
Was ist das Hauptmerkmal von Postgres 19?
Das Hauptmerkmal ist die native Unterstützung für SQL/PGQ (Property Graph Queries), die es Entwicklern ermöglicht, relationale Daten mithilfe einer graphenähnlichen Syntax abzufragen, was komplexe Joins vereinfacht.
Ist Postgres 19 ein Ersatz für dedizierte Graphdatenbanken wie Neo4j?
Nein. Die neue Graph-Abfragefunktion wurde entwickelt, um die Ergonomie beim Schreiben komplexer Abfragen auf bestehenden relationalen Daten zu verbessern. Für Anwendungsfälle, die eine spezialisierte Graphspeicherung und maximale Traversierungsleistung erfordern, ist eine dedizierte Graphdatenbank nach wie vor die bessere Wahl.
Wie unterscheidet sich REPACK CONCURRENTLY von VACUUM FULL?
VACUUM FULL sperrt eine Tabelle für die gesamte Dauer, was zu Ausfallzeiten führt. REPACK CONCURRENTLY schreibt die Tabelle neu, um Speicherplatz zurückzugewinnen, ohne eine langfristige exklusive Sperre, wodurch die Tabelle während des Vorgangs les- und schreibbar bleibt.
Welches Problem löst ON CONFLICT DO SELECT?
Es löst das häufige 'Get-or-Create'-Problem mit einer einzigen, atomaren Anweisung. Es ermöglicht Ihnen, eine Zeile einzufügen, falls sie nicht existiert, oder die vorhandene Zeile auszuwählen, falls sie existiert – alles innerhalb einer transaktionssicheren Operation, wodurch Race Conditions eliminiert werden.

