CodeGym /Kurse /SQL SELF /Arbeiten mit dem Datentyp JSONB

Arbeiten mit dem Datentyp JSONB

SQL SELF
Level 16 , Lektion 1
Verfügbar

JSON (JavaScript Object Notation) ist ein beliebtes Datenformat für den Informationsaustausch zwischen Systemen. Es ist leichtgewichtig, menschenlesbar und perfekt geeignet, um strukturierte Daten wie Objekte oder Arrays darzustellen.

PostgreSQL unterstützt zwei Datentypen für die Arbeit mit JSON:

  • JSON: speichert Daten als String. Das ist eine reine Textdarstellung von JSON, ohne interne Optimierung.
  • JSONB: binäre Darstellung von JSON. Das ist effizienter beim Lesen, Filtern und Verarbeiten, weil PostgreSQL das JSON vorher parst und die Speicherung optimiert.

Warum wird JSONB meistens bevorzugt? Weil:

  • Es ist schneller bei Abfragen dank binärer Speicherung.
  • Es kann indiziert werden, was es ideal für große Datenmengen macht.
  • Es hält Keys sortiert und entfernt Duplikate, was die Verarbeitung vereinfacht.

Beispiel für eine JSON-Struktur:

{
  "name": "Alice",
  "age": 25,
  "skills": ["SQL", "PostgreSQL", "JSONB"]
}

Warum ist JSONB nützlich?

Speichern von halbstrukturierten Daten. In der echten Welt kommen Daten oft als komplexe Objekte (zum Beispiel Metadaten, Einstellungen, Benutzerprofile). JSONB erlaubt es, sie zu speichern, ohne hunderte Tabellen und Beziehungen zu bauen.

Modellieren von Daten, die sich ändern. Wenn sich die Struktur eines Objekts oft ändert (zum Beispiel Felder hinzugefügt oder entfernt werden), kannst du mit JSONB solche Daten flexibel speichern.

Arbeiten mit APIs. Viele Webanwendungen schicken Daten im JSON-Format. Anstatt die Requests umzubauen, kannst du sie einfach "as is" speichern und direkt damit arbeiten.

Eine Tabelle mit JSONB erstellen

Lass uns gleich praktisch werden! Stell dir vor, wir bauen eine Datenbank, um Benutzerprofile zu speichern.

Die Spalte profile speichert alle Zusatzinfos (zum Beispiel Alter, Interessen, Kontakte) im JSON-Format. Das ist praktisch, wenn die Datenstruktur von User zu User unterschiedlich ist.

id name - VARCHAR(100) profile - JSONB
1 Alice {"alter": 25, "fähigkeiten": ["SQL", "PostgreSQL", "JSONB"], "standort": "New York"}
2 Bob {"alter": 30, "interessen": ["wandern", "fotografie"], "standort": "Denver"}
3 Charlie {"email": "charlie@example.com", "verifiziert": true}
4 Diana {"alter": 22, "fähigkeiten": ["Python"], "bio": "Daten-enthusiast", "standort": "Berlin"}
5 Eve {"alter": 28, "fähigkeiten": [], "präferenzen": {"thema": "dunkel", "benachrichtigungen": false}}

JSON-Daten kannst du einfach als String einfügen. PostgreSQL wandelt sie automatisch in das JSONB-Format um.

Daten aus JSONB auslesen

Jetzt, wo wir Daten haben, schauen wir uns an, wie man sie abruft. PostgreSQL bietet viele Operatoren für die Arbeit mit JSONB.

Auf einen Feldwert zugreifen

Wir nutzen den Operator ->, um den Wert eines Feldes zu bekommen:

-- Alter des Benutzers anzeigen
SELECT profile->'alter' AS alter FROM users;

Wert in Text umwandeln

Mit dem Operator ->> kannst du den Wert als String extrahieren:

-- Wohnort des Benutzers anzeigen
SELECT profile->>'standort' AS standort FROM users;

Daten mit JSONB filtern

Die Power von JSONB zeigt sich beim Filtern in Abfragen. Du kannst Standard-SQL-Operatoren für JSON nutzen.

Beispiel für Filter nach Key:

-- Finde Benutzer, deren Wohnort "New York" ist
SELECT * FROM users
WHERE profile->>'standort' = 'New York';

Suche im Array

JSON unterstützt Arrays und PostgreSQL kann darin suchen:

-- Finde Benutzer, die SQL können
SELECT * FROM users
WHERE 'SQL' = ANY(jsonb_array_elements_text(profile->'fähigkeiten'));

Die Funktion jsonb_array_elements_text macht die Array-Elemente zu Strings, damit du sie vergleichen kannst.

Es gibt auch eine kürzere Variante mit dem Operator @>:

-- Finde Benutzer, die SQL können
SELECT * FROM users
WHERE profile->'fähigkeiten' @> '["SQL"]';

Mehr zu Funktionen und Möglichkeiten rund um JSON machen wir später, wenn es soweit ist :P

Kurz und knapp: Wann solltest du JSONB nutzen?

JSONB ist super für:

  • Speichern von komplexen, strukturierten Daten.
  • Verarbeiten von Daten aus externen APIs.
  • Fälle, in denen sich die Objektstruktur ändert.

Aber vergiss nicht: Zu viel JSONB kann das Indizieren und das Datenbank-Management komplizierter machen. Wenn deine Datenstruktur stabil ist, ist das relationale Modell oft besser.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION