PostgreSQL GIN Indizierung
Mit den PostgreSQL JSON-Funktionen kannst du JSON-Daten in deiner Datenbank speichern, abfragen und manipulieren. Sie sind wichtig, um JSON-Datentypen zu verarbeiten und Operationen wie Extraktion, Aggregation und Transformation durchzuführen.
Verwendung
JSON-Funktionen werden beim Umgang mit in PostgreSQL gespeicherten JSON-Daten verwendet und ermöglichen eine effiziente Abfrage und Manipulation dieses halbstrukturierten Datentyps. Sie erleichtern Vorgänge wie das Abrufen von JSON-Objekten, den Zugriff auf bestimmte Werte und die Durchführung von Änderungen.
Syntax
json -> key
jsonb ->> key
jsonb_set(target jsonb, path text[], new_value jsonb)
In diesen Beispielen wird `->` verwendet, um JSON-Objekte zu extrahieren, `->>` ruft JSON-Werte als Text ab und `jsonb_set` aktualisiert JSON-Daten an einem bestimmten Pfad.
Der Unterschied zwischen `json` und `jsonb`:
json
: Speichert JSON-Daten als Text, wobei Leerzeichen und die Reihenfolge der Schlüssel erhalten bleiben.jsonb
: Speichert JSON-Daten in einem Binärformat, das eine bessere Leistung und Indizierungsmöglichkeiten bietet. Aus diesem Grund wird `jsonb` für die meisten Anwendungsfälle bevorzugt.
Beispiele
1. JSON-Objekt extrahieren
SELECT data -> 'name' AS name
FROM json_table;
Diese Abfrage extrahiert das JSON-Objekt, das mit dem Schlüssel `Name` verbunden ist, aus der Spalte `Daten` in der `json_table`.
2. Zugriff auf JSON-Wert als Text
SELECT data ->> 'age' AS age
FROM json_table;
Hier wird der JSON-Wert von "Alter" als Text abgerufen. Das ist ideal für Fälle, in denen du die Daten im Textformat für die weitere Verarbeitung brauchst.
3. JSON-Daten aktualisieren
UPDATE json_table
SET data = jsonb_set(data, '{address, city}', '"New York"')
WHERE id = 1;
Dies aktualisiert das Feld "Stadt" im JSON-Objekt "Adresse" auf "New York" für eine bestimmte Zeile, in der "ID" gleich 1 ist.
4. Umgang mit JSON-Arrays
SELECT jsonb_array_elements(data -> 'tags') AS tag
FROM json_table;
Diese Abfrage zeigt, wie man JSON-Arrays handhabt, indem man jedes Element aus dem `tags`-Array innerhalb eines JSON-Objekts extrahiert.
5. JSON-Operationen
SELECT jsonb_each(data)
FROM json_table;
In diesem Beispiel wird `jsonb_each` verwendet, um das JSON-Objekt in eine Reihe von Schlüssel-Wert-Paaren zu zerlegen, die für die Iteration über Daten nützlich sind.
Tipps und bewährte Praktiken
- Verwende `jsonb` statt `json`. jsonb" wird im Allgemeinen wegen der besseren Leistung und der Indizierungsmöglichkeiten bevorzugt.
- JSON-Daten indizieren. Nutze die GIN-Indizierung für effiziente Abfragen von JSONB-Daten, um die Leistung zu verbessern.
CREATE INDEX jsonb_idx ON json_table USING GIN (data);