Deutsch
  • postgresql
  • jsonb
  • json
  • datenbank

Erste Schritte mit dem PostgreSQL JSONB-Typ in einem Artikel

Erfahren Sie, wie man den JSONB-Typ von PostgreSQL effizient zum Speichern, Abfragen und Manipulieren von JSON-Daten verwendet.

Yijun
Yijun
Developer

Verschwenden Sie keine Wochen mit Benutzerauthentifizierung
Bringen Sie sichere Apps schneller mit Logto auf den Markt. Integrieren Sie Benutzerauthentifizierung in Minuten und konzentrieren Sie sich auf Ihr Kernprodukt.
Jetzt starten
Product screenshot

In der modernen Anwendungsentwicklung wird der Umgang und die Speicherung unstrukturierter Daten immer häufiger. Der JSONB-Typ von PostgreSQL bietet Entwicklern ein leistungsfähiges Werkzeug zur effizienten Speicherung und Abfrage von JSON-Daten. In diesem Artikel werden wir uns mit dem Konzept und der Verwendung des JSONB-Typs auseinandersetzen und seine leistungsfähigen Funktionen anhand spezifischer Code-Beispiele demonstrieren.

Was ist JSONB?

JSONB ist ein PostgreSQL-Datentyp, der JSON-Daten in einem binären Format speichert. Im Gegensatz zum regulären JSON-Typ ist JSONB effizienter bei der Abfrage und Manipulation. Es unterstützt eine breite Palette von Operatoren und Funktionen, die die Handhabung von JSON-Daten vereinfachen. Zusätzlich unterstützt JSONB mehrere Index-Typen, einschließlich B-Baum, Hash, GIN und GiST-Indizes, was die Abfrageleistung weiter verbessert.

Erstellen von JSONB-Typ

Erstellen einer Tabelle mit JSONB-Typ

Zunächst erstellen wir eine Tabelle mit einer JSONB-Spalte. Angenommen, wir haben eine Produkte-Tabelle zur Speicherung von Produktinformationen, wobei die Produktdetails mit dem JSONB-Typ gespeichert werden.

Einfügen von JSONB-Daten

Wir können JSON-Daten in ein JSONB-Feld einfügen, indem wir ein einfaches INSERT-Statement verwenden.

Abfragen von JSONB-Daten

Extrahieren von Werten aus JSONB-Feldern

Wir können den ->> Operator verwenden, um Textwerte aus einem JSONB-Feld zu extrahieren. Das folgende Beispiel zeigt, wie man die Markeninformationen eines Produkts extrahiert.

Extrahieren von tief verschachtelten Werten mit JSONB

Wir können eine Kombination von -> und ->> Operatoren verwenden, um Werte, die in einer JSON-Struktur verschachtelt sind, zu extrahieren. Das folgende Beispiel zeigt, wie man die CPU-Informationen eines Produkts extrahiert.

Extrahieren von Werten mit JSONB-Pfaden

Mit dem #>>-Operator können wir Werte aus spezifischen Pfaden innerhalb der JSON-Daten extrahieren. Das folgende Beispiel zeigt, wie man Speicherinformationen extrahiert.

Verwendung des @>-Operators für containment-Abfragen

Der @>-Operator überprüft, ob ein JSONB-Objekt ein anderes JSONB-Objekt enthält. Das folgende Beispiel zeigt, wie man Produkte einer bestimmten Marke abfragt.

Modifizieren von JSONB-Daten

Aktualisieren von JSONB-Daten

Wir können die Funktion jsonb_set verwenden, um JSONB-Daten zu aktualisieren. Diese Funktion aktualisiert den Wert an einem spezifischen Pfad. Das folgende Beispiel zeigt, wie man die Speicherinformationen eines Produkts aktualisiert.

Löschen von Top-Level-Feldern in JSONB-Daten

Wir können den --Operator verwenden, um Top-Level-Felder aus JSONB-Daten zu entfernen. Dieser Operator löscht den angegebenen Schlüssel aus einem JSONB-Objekt. Das folgende Beispiel zeigt, wie man ein Top-Level-Feld aus den Produktdetails entfernt.

Löschen von verschachtelten Feldern in JSONB-Daten

Wir können den #--Operator verwenden, um bestimmte Pfadelemente aus JSONB-Daten zu entfernen. Dieser Operator löscht den Schlüssel am angegebenen Pfad. Das folgende Beispiel zeigt, wie man die CPU-Informationen aus den Produkteigenschaften löscht.

Fortgeschrittene JSONB-Abfragen

Verwendung von JSONB-Arrays

JSONB-Daten können Arrays enthalten und wir können Array-bezogene Operatoren verwenden, um diese Daten zu handhaben. Das folgende Beispiel zeigt, wie man Produkte mit mehreren Tags speichert und abfragt.

Im obigen Beispiel können Sie auch den ?-Operator verwenden, um zu überprüfen, ob ein JSONB-Array ein spezifisches Element enthält:

Zusammenführen von JSONB-Daten

Wir können den ||-Operator verwenden, um zwei JSONB-Objekte zusammenzuführen. Dieser Operator kombiniert zwei JSONB-Objekte zu einem. Das folgende Beispiel zeigt, wie man neue Spezifikationen in vorhandene Produktdetails einfügt.

Aggregation von JSONB-Daten

Wir können Aggregationsfunktionen verwenden, um JSONB-Daten zu verarbeiten, wie zum Beispiel die Anzahl der Produkte für jede Marke zu zählen.

JSONB-Indexierung und Leistungsoptimierung

Um die Abfrageleistung mit JSONB-Daten zu verbessern, können wir Indizes für spezifische Schlüssel innerhalb des JSONB-Feldes erstellen. Die Auswahl des richtigen Index-Typs ist entscheidend für verschiedene Abfrageanforderungen.

  • GIN-Index: Geeignet für komplexe Abfragen mit mehrwertigen Daten, Arrays und Volltextsuche.
  • B-Baum-Index: Geeignet für einfache Schlüssel-Wert-Paar-Abfragen, Bereichsabfragen und Sortieroperationen.

Die richtige Auswahl und Erstellung von Indizes kann die Leistung von JSONB-Datenabfragen erheblich verbessern.

Erstellen eines GIN-Index

GIN-Indizes sind ideal für die Beschleunigung von Abfragen mit mehrwertigen Daten und Arrays. Zum Beispiel können wir einen GIN-Index für das zuvor erwähnte tags-Array erstellen, um Abfragen auf Array-Elemente zu beschleunigen.

Erstellen eines B-Baum-Index

Für einfache Schlüssel-Wert-Paar-Abfragen kann auch ein B-Baum-Index die Leistung erheblich verbessern. B-Baum-Indizes eignen sich für Bereichsabfragen und Sortieroperationen. Das folgende Beispiel zeigt, wie man einen B-Baum-Index für den model-Schlüssel im Feld details erstellt.

Fazit

Der JSONB-Typ von PostgreSQL bietet eine leistungsstarke und flexible Lösung für die Handhabung von JSON-Daten. Mit den in diesem Artikel vorgestellten und erläuterten Beispielen sollten Sie nun ein umfassendes Verständnis dafür haben, wie man den JSONB-Typ verwendet. Durch den Einsatz dieser Techniken können Sie unstrukturierte Daten effizient handhaben und abfragen, was die Leistung und Flexibilität Ihrer Anwendungen verbessert.