PostgreSQL macht weiterhin das, was in der Softwarewelt selten ist: Es wird jedes Jahr besser, ohne schlechter zu werden. Version 18 ist ein gehaltvolles Release, und ungewöhnlich für ein Datenbank-Upgrade sind mehrere der wichtigsten Neuerungen Dinge, die Anwendungsentwickler: nicht nur DBAs: tatsächlich spüren werden. Ein neues asynchrones I/O-Subsystem, ein eingebauter Generator für zeitlich geordnete UUIDs, flexiblere generierte Spalten und intelligentere Indizierung adressieren jeweils echte, alltägliche Probleme. Dieser Leitfaden führt durch die Änderungen, die für diejenigen relevant sind, die die Abfragen schreiben, und warum sich ein Upgrade lohnt.
Die Änderungen, die Entwickler tatsächlich spüren werden
- Asynchrones I/O für schnellere Lesevorgänge bei leseintensiven Workloads
- Eingebaute uuidv7()-Funktion für zeitlich geordnete UUIDs, die gut indizierbar sind
- Virtuelle generierte Spalten, die beim Lesen berechnet werden
- Skip Scan, der mehr Abfragen die Nutzung mehrspaltiger Indizes ermöglicht
- Ein reibungsloserer Upgrade-Pfad für Hauptversionen
Info
Warum ein Datenbank-Release Ihre Aufmerksamkeit verdient
Die Performance einer Anwendung ist oft im Kern Datenbank-Performance. Funktionen, die Lesevorgänge beschleunigen, Schlüssel besser indizierbar machen und Indizes auf mehr Abfragen anwendbar machen, führen direkt zu reaktionsschnelleren Apps, ohne dass Sie Anwendungscode umschreiben müssen. Überprüfen Sie die Einzelheiten stets anhand der offiziellen PostgreSQL-18-Release-Notes für Ihre Plattform.
Asynchrones I/O: schnellere Lesevorgänge unter Last
Bisher führte PostgreSQL Festplattenlesevorgänge einzeln aus und wartete auf jeden einzelnen: bei schnellem Speicher mit kleinen Working Sets in Ordnung, weniger jedoch, wenn eine Abfrage viele Seiten abrufen muss, die nicht im Cache liegen. Version 18 führt ein asynchrones I/O-Subsystem ein, das es der Datenbank erlaubt, mehrere Leseanfragen gleichzeitig zu stellen, sodass sie weniger Zeit mit Warten auf den Speicher verbringt. Für leseintensive Workloads, große Scans und analytische Abfragen kann dies den Durchsatz spürbar verbessern, insbesondere wenn die Daten nicht vollständig in den Arbeitsspeicher passen.
Tipp
Der Gewinn ist am größten, wo Sie I/O-gebunden waren
Wenn Ihr Workload bereits in den RAM passt, werden Sie weniger bemerken. Die größten Vorteile ergeben sich bei großen Tabellen, großen sequenziellen oder Bitmap-Scans und Abfragen, die zuvor durch Warten auf die Festplatte ausgebremst wurden. Messen Sie wie immer mit Ihren eigenen Daten, statt Annahmen zu treffen.
uuidv7(): der richtige Weg für UUID-Schlüssel
Entwickler lieben UUIDs als Primärschlüssel: global eindeutig, clientseitig generierbar, keine zentrale Sequenz. Aber herkömmliche zufällige UUIDs (v4) haben einen unangenehmen Nebeneffekt: Da sie zufällig sind, verteilt das Einfügen die Schreibvorgänge über den gesamten Index, was mit wachsenden Tabellen zu Fragmentierung und schlechtem Cache-Verhalten führt. UUIDv7 behebt dies, indem es einen Zeitstempel einbettet, sodass die Werte zeitlich geordnet sind: Neue Zeilen gruppieren sich im Index ähnlich wie bei automatisch inkrementierenden Ganzzahlen, während die UUID-Eindeutigkeit erhalten bleibt. PostgreSQL 18 fügt eine eingebaute Funktion hinzu, sodass Sie keine Erweiterung oder clientseitige Bibliothek mehr benötigen, um sie zu erhalten.uuidv7() Funktion, sodass Sie keine Erweiterung oder clientseitige Bibliothek mehr benötigen, um sie zu erhalten.
-- Time-ordered UUID keys, built in — unique AND index-friendly.
CREATE TABLE orders (
id uuid PRIMARY KEY DEFAULT uuidv7(),
customer_id bigint NOT NULL,
created_at timestamptz NOT NULL DEFAULT now()
);
-- New rows cluster at the "end" of the index like serial ids,
-- avoiding the write scattering that random uuidv4 causes.
Profi-Tipp
Wenn Sie UUID-Primärschlüssel für eine neue Tabelle unter PostgreSQL 18 wählen, bevorzugen Sie uuidv7() gegenüber zufälligem v4. Sie behalten alle Vorteile von UUIDs und vermeiden gleichzeitig die Indexfragmentierung und die Verlangsamung von Einfügevorgängen, die zufällige UUIDs bei großen, schreibintensiven Tabellen verursachen. Das ist fast ein geschenkter Gewinn.
Generierte Spalten werden flexibler
Generierte Spalten lassen die Datenbank eine Spalte automatisch aus anderen Spalten berechnen. Bisher unterstützte PostgreSQL nur gespeicherte generierte Spalten: der Wert wird beim Schreiben berechnet und auf der Festplatte gespeichert. Version 18 führt virtuelle generierte Spalten ein, die bei Bedarf beim Lesen berechnet werden, sodass sie keinen Speicherplatz kosten und nie veralten. Das ist ideal für abgeleitete Werte, die Sie wie eine normale Spalte abfragen möchten, aber nicht physisch persistieren wollen.
CREATE TABLE products (
price_cents int NOT NULL,
tax_rate numeric NOT NULL,
-- computed on read: no storage, always current with its inputs
total_cents int GENERATED ALWAYS AS
(price_cents + round(price_cents * tax_rate)) VIRTUAL
);
✓ Vorteile
- Virtuelle Spalten: abgeleitete Werte ohne Speicherkosten
- Berechnete Werte wie gewöhnliche Spalten abfragen: saubererer Anwendungscode
- Gespeicherte Spalten weiterhin verfügbar, wenn Sie vorberechnete Werte wünschen
- Die Logik lebt im Schema, nicht verstreut über jede Abfrage
✕ Nachteile
- Virtuelle Werte werden bei jedem Lesevorgang neu berechnet: wägen Sie Lese- gegen Schreibkosten ab
- Komplexe Ausdrücke verlagern Arbeit in die Datenbank; profilen Sie sie
- Verhalten und Voreinstellungen unterscheiden sich von gespeicherten Spalten: lesen Sie die Dokumentation
- Kein Ersatz für eine ordentliche Indizierung häufig gefilterter Werte
Skip Scan: mehr Abfragen nutzen Ihre Indizes
Ein klassischer Fallstrick: Sie haben einen mehrspaltigen Index auf (a, b), aber eine Abfrage filtert nur nach b, sodass PostgreSQL den Index nicht effizient nutzen kann und auf einen langsameren Scan zurückfällt. Version 18 verbessert dies mit Skip Scan, der es dem Planer erlaubt, einen solchen Index auch dann zu verwenden, wenn die führende Spalte nicht eingeschränkt ist, indem er effektiv durch deren unterschiedliche Werte „springt“. Der praktische Effekt ist, dass mehr Ihrer bestehenden Abfragen auf bereits vorhandene Indizes zurückgreifen können, ohne dass Sie neue hinzufügen müssen.
Warnung
Hilfreich, aber kein Grund, nicht mehr über Indizes nachzudenken
Skip Scan erweitert die Anwendbarkeit bestehender mehrspaltiger Indizes: ein echter Gewinn -, macht aber das Indexdesign nicht irrelevant. Indizes auf Ihre tatsächlichen Abfragemuster hin zu entwerfen, bleibt wichtig. Betrachten Sie Skip Scan als Sicherheitsnetz, das mehr Fälle abfängt, nicht als Ersatz für das Verständnis Ihrer Zugriffsmuster.
Ein reibungsloserer Upgrade-Pfad
Große PostgreSQL-Upgrades hatten lange einen versteckten Preis: Nach dem Upgrade wurden die Statistiken des Abfrageplaners nicht übernommen, sodass das frisch aktualisierte System mit schlechten Plänen arbeiten konnte, bis diese Statistiken neu aufgebaut waren: manchmal ein unangenehmer Leistungseinbruch genau dann, wenn man ihn am wenigsten gebrauchen kann. Version 18 verbessert diesen Bereich, sodass Upgrades seltener zu einer vorübergehend langsamen Datenbank führen und das Risiko sowie den Stress eines Major-Versionswechsels verringern.
sind der Bereich, in dem die meisten Anwendungen die Datenbank spüren: und Version 18 zielt genau darauf ab
Sollten Sie upgraden?
Neue Projekte
Beginnen Sie mit Version 18. Sie erhalten uuidv7(), asynchrone I/O und virtuelle generierte Spalten von Anfang an, ohne Migrationsaufwand.
Leseintensive oder I/O-gebundene Anwendungen
Allein die Verbesserungen bei asynchroner I/O können den Umstieg rechtfertigen: messen Sie Ihre tatsächliche Arbeitslast, um den Gewinn zu beziffern.
Schreibintensive Anwendungen mit UUID-Schlüsseln
Die Migration neuer Tabellen auf uuidv7() kann Index-Blähungen reduzieren und die Einfügeleistung bei wachsendem Datenvolumen verbessern.
Jede Produktivdatenbank
Testen Sie zuerst an einer Kopie, prüfen Sie die Unterstützung der Erweiterungen für Version 18 und proben Sie das Upgrade: die verbesserte Statistiken-Behandlung hilft, aber Vorsicht bleibt angebracht.
! Häufige Fehler, die es zu vermeiden gilt
-
✕Zufällige uuidv4 als Primärschlüssel in großen Tabellen verwenden.
✓Bevorzugen Sie das eingebaute uuidv7(): zeitlich geordnete Werte vermeiden die Indexfragmentierung, die v4 verursacht.
-
✕Annehmen, dass asynchrone I/O jeder Arbeitslast hilft.
✓Die Vorteile zeigen sich bei lese- und I/O-gebundenen Abfragen; wenn Ihre Daten in den Arbeitsspeicher passen, werden Sie weniger bemerken.
-
✕Skip Scan als Grund betrachten, keine Indizes mehr zu entwerfen.
✓Er erweitert die Anwendbarkeit vorhandener Indizes, aber das Indexdesign anhand realer Abfragemuster bleibt wichtig.
-
✕Produktivumgebung ohne getestete Probe upgraden.
✓Testen Sie an einer Kopie, prüfen Sie die Unterstützung der Erweiterungen für Version 18 und proben Sie das Upgrade: auch mit der verbesserten Statistiken-Behandlung.
? Häufig gestellte Fragen
Warum sollten Entwickler sich für PostgreSQL 18 interessieren? +
Mehrere herausragende Funktionen kommen direkt bei Entwicklern an: asynchrone I/O für schnellere Lesevorgänge, eingebaute zeitlich geordnete uuidv7()-Schlüssel, virtuelle generierte Spalten und Skip Scan, sodass mehr Abfragen vorhandene Indizes nutzen.
Was ist uuidv7 und warum sollte man es uuidv4 vorziehen? +
UUIDv7 bettet einen Zeitstempel ein, sodass die Werte zeitlich geordnet sind und sich im Index ähnlich wie fortlaufende IDs gruppieren. So werden die Streuung beim Schreiben und die Fragmentierung vermieden, die zufälliges UUIDv4 bei großen, schreibintensiven Tabellen verursacht.
Was sind virtuelle generierte Spalten? +
Spalten, die beim Lesen berechnet statt beim Schreiben gespeichert werden: sie verbrauchen keinen Speicherplatz und veralten nie, ideal für abgeleitete Werte, die Sie wie normale Spalten abfragen möchten, ohne sie zu persistieren.
Was verbessert asynchrone I/O? +
Sie ermöglicht PostgreSQL, mehrere Leseanfragen gleichzeitig zu bearbeiten, anstatt auf jede einzelne zu warten. Das verbessert den Durchsatz bei leseintensiven Arbeitslasten, großen Scans und Daten, die nicht in den Arbeitsspeicher passen.
Ist ein Upgrade auf Version 18 riskant? +
Weniger als zuvor: Verbesserungen reduzieren den Leistungseinbruch nach dem Upgrade durch fehlende Planerstatistiken. Testen Sie dennoch an einer Kopie, prüfen Sie die Unterstützung der Erweiterungen und proben Sie das Upgrade.
Erfolg
Ein wirklich entwicklerfreundliches Release
PostgreSQL 18 ist ungewöhnlich, weil so viel Wert direkt bei Entwicklern ankommt: schnellere Lesevorgänge, bessere UUID-Schlüssel, speicherplatzfreie abgeleitete Spalten und Indizes, die für mehr Abfragen greifen. Setzen Sie es ohne Zögern für neue Projekte ein, planen Sie ein getestetes Upgrade für bestehende Systeme und nutzen Sie uuidv7() und virtuelle Spalten, sobald Sie auf Version 18 sind.
Kommentare
0Noch keine Kommentare. Teile als Erste oder Erster deine Gedanken.