PostgreSQL bietet erstklassige JSON-Unterstützung mit JSONB.
Operatoren¶
SELECT data->>'name' FROM events;
SELECT * FROM events WHERE data->>'type'='click';
SELECT * FROM events WHERE data @> '{"type":"click"}';
SELECT * FROM events WHERE data ? 'email';
Indizes¶
CREATE INDEX idx_data ON events USING GIN (data);
CREATE INDEX idx_type ON events ((data->>'type'));
Manipulation¶
UPDATE users SET data=data||'{"verified":true}';
UPDATE users SET data=data-'temp';
UPDATE users SET data=jsonb_set(data,'{address,city}','"Prag"');
Wann JSONB vs. relationales Schema¶
Verwenden Sie JSONB fuer semi-strukturierte Daten mit variablem Schema — Benutzereinstellungen, Metadaten, Konfigurationen oder Daten von externen APIs. Fuer fest strukturierte Daten mit klar definierten Beziehungen bleiben Sie bei klassischen relationalen Tabellen — sie sind schneller und typsicher.
Ein GIN-Index auf einer JSONB-Spalte unterstuetzt die Operatoren @>, ?, ?| und ?&, was die meisten Abfragemuster abdeckt. Fuer Abfragen auf einen bestimmten Schluessel (z.B. data->>'type') erstellen Sie einen B-tree-Index auf den Ausdruck. PostgreSQL 14+ hat jsonb_path_query fuer SQL/JSON-Path-Abfragen hinzugefuegt, die standardisierter und oft lesbarer sind als traditionelle Operatoren.
JSONB = Flexibilität + Leistung¶
GIN-Index für schnelle Abfragen.