Ich versuche, den json
Typ in PostgreSQL 9.3 zu testen .
Ich habe eine json
Spalte data
in einer Tabelle namens aufgerufen reports
. Der JSON sieht ungefähr so aus:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Ich möchte die Tabelle nach allen Berichten abfragen, die mit dem Wert 'src' im Array 'objects' übereinstimmen. Ist es beispielsweise möglich, die Datenbank nach allen übereinstimmenden Berichten abzufragen 'src' = 'foo.png'
? Ich habe erfolgreich eine Abfrage geschrieben, die mit Folgendem übereinstimmt "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Aber da "objects"
es eine Reihe von Werten gibt, kann ich scheinbar nichts schreiben, was funktioniert. Ist es möglich, die Datenbank nach allen übereinstimmenden Berichten abzufragen 'src' = 'foo.png'
? Ich habe diese Quellen durchgesehen, kann sie aber immer noch nicht verstehen:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Wie frage ich mithilfe von Feldern im neuen PostgreSQL JSON-Datentyp ab?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Ich habe auch solche Dinge ausprobiert, aber ohne Erfolg:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Ich bin kein SQL-Experte, daher weiß ich nicht, was ich falsch mache.
jsonb
/ pg 9.4 hinzugefügt . Nebenbei: Für den einfachen Fall (1 Verschachtelungsebene) macht der->
Bediener auch den Trick fürjson
in S. 9.3.Erstellen Sie eine Tabelle mit einer Spalte vom Typ json
Fügen wir nun json-Daten ein
Lassen Sie uns nun einige Abfragen zum Abrufen von Daten durchführen
Möglicherweise haben Sie bemerkt, dass die Ergebnisse mit Anführungszeichen (") und Klammern ([]) versehen sind.
Um nur die Werte abzurufen, verwenden Sie einfach
->>
quelle
Wählen Sie Daten -> 'Objekte' -> 0 -> 'src' als SRC aus der Tabelle, in der Daten -> 'Objekte' -> 0 -> 'src' = 'foo.png'
quelle