PostgreSQL JSONB: Flexible Daten abfragen und aktualisieren

  • 22 Aug 2025
  • CODLAB Team
  • 2 min

JSONB eignet sich für strukturierte Zusatzdaten, deren Felder nicht für jeden Datensatz gleich sind. Es ergänzt ein relationales Datenmodell. Bevor Sie es einsetzen, legen Sie fest, welche Eigenschaften flexibel bleiben dürfen und welche Werte durch feste Spalten und Bedingungen abgesichert werden sollen.

Eine JSONB-Spalte verwenden

Das Beispiel zeigt eine Tabelle mit einer JSONB-Spalte und ausdrücklich fiktiven Datensätzen. Die Struktur der Objekte muss weiterhin zu den Anforderungen Ihrer Anwendung passen.

-- Erstellen einer Tabelle mit einer JSONB-Spalte
CREATE TABLE beispieldaten (
    id SERIAL PRIMARY KEY,
    daten JSONB NOT NULL
);

-- Einfügen von JSON-Daten
INSERT INTO beispieldaten (daten)
VALUES
('{ "name": "Max Mustermann", "alter": 28, "interessen": ["Lesen", "Wandern", "Programmieren"] }'::jsonb),
('{ "name": "Erika Mustermann", "alter": 32, "interessen": ["Reisen", "Kochen", "Sport"] }'::jsonb);

JSONB prüft die grundlegende JSON-Struktur, definiert aber keinen vollständigen fachlichen Vertrag für Ihre Daten. Fehlende Schlüssel, unerwartete Typen und uneinheitliche Einheiten können spätere Abfragen erschweren. Prüfen Sie Eingaben daher anhand des beabsichtigten Schemas.

Schlüssel und enthaltene Werte abfragen

Die Operatoren unterscheiden zwischen einem JSON-Wert und seiner Textdarstellung. Im Beispiel prüft ? einen Wert im Interessen-Array. jsonb_set() ändert einen bestimmten Pfad; der übrige Inhalt des Objekts bleibt erhalten.

-- Finden von Einträgen, die das Interesse "Programmieren" enthalten
SELECT * FROM beispieldaten
WHERE daten->'interessen' ? 'Programmieren';

-- Aktualisieren von JSONB-Daten
UPDATE beispieldaten
SET daten = jsonb_set(daten, '{alter}', '29')
WHERE daten->>'name' = 'Max Mustermann';

Beachten Sie den Unterschied zwischen einem fehlenden Schlüssel und einem vorhandenen JSON-null-Wert. Wenn mehrere Prozesse dasselbe Objekt verändern, planen Sie die Updates und Transaktionen so, dass keine Änderung unbeabsichtigt überschrieben wird. Übergeben Sie Werte über Parameter statt durch Zusammenbauen von SQL-Text.

Abfragen und Datenmodell gemeinsam entwickeln

Wählen Sie Indizes anhand der tatsächlich verwendeten Operatoren. Ein Index auf dem gesamten JSONB-Feld und ein Ausdrucksindex auf einem einzelnen Schlüssel lösen unterschiedliche Aufgaben. Prüfen Sie beide über Ausführungspläne und eine repräsentative Datenmenge.

Wenn eine Eigenschaft fachlich verbindlich wird, häufig sortiert wird oder Beziehungen zu anderen Datensätzen trägt, kann eine eigene Spalte die klarere Lösung sein. Dokumentieren Sie die JSON-Struktur und ihre Änderungen wie jeden anderen Teil des Datenmodells.

Weiterführende Dokumentation: PostgreSQL: JSON Types.

Teilen Sie diesen Artikel

Kunden

Noch keine Kommentare. Schreiben Sie den ersten!

Einen Kommentar hinterlassen

Wird nicht veröffentlicht

Verwandte Artikel

Projekt im Kopf?

Wir entwickeln maßgeschneiderte Software und KI-Lösungen. Lassen Sie uns gemeinsam Ihr nächstes Projekt starten.

Kostenloses Erstgespräch