Ich suche nach einigen Dokumenten und / oder Beispielen für die neuen JSON-Funktionen in PostgreSQL 9.2.
Insbesondere bei einer Reihe von JSON-Datensätzen:
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
Wie würde ich die SQL schreiben, um einen Datensatz nach Namen zu finden?
In Vanilla SQL:
SELECT * from json_data WHERE "name" = "Toby"
Das offizielle Entwicklerhandbuch ist ziemlich spärlich:
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
Update I.
Ich habe eine Übersicht zusammengestellt, die ausführlich beschreibt, was derzeit mit PostgreSQL 9.2 möglich ist . Mit einigen benutzerdefinierten Funktionen können Sie Folgendes tun:
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
Update II
Ich habe jetzt meine JSON-Funktionen in ein eigenes Projekt verschoben:
PostSQL - eine Reihe von Funktionen zur Umwandlung von PostgreSQL und PL / v8 in einen fantastischen JSON-Dokumentenspeicher
sql
json
postgresql
postgresql-9.2
postgresql-9.3
Toby Hede
quelle
quelle
Antworten:
Postgres 9.2
Ich zitiere Andrew Dunstan auf der Liste der pgsql-Hacker :
Verhindert nicht, dass er eine Beispielimplementierung in PLV8 bereitstellt , die Ihr Problem lösen sollte.
Postgres 9.3
Bietet ein Arsenal neuer Funktionen und Operatoren, um "json-processing" hinzuzufügen.
Die Antwort auf die ursprüngliche Frage in Postgres 9.3:
Erweitertes Beispiel:
Bei größeren Tabellen möchten Sie möglicherweise einen Ausdrucksindex hinzufügen, um die Leistung zu steigern:
Postgres 9.4
Adds
jsonb
(b für "binär", Werte werden als native Postgres-Typen gespeichert) und noch mehr Funktionalität für beide Typen. Zusätzlich zu den oben erwähnten Expressionsindizes werdenjsonb
auch GIN-, btree- und Hash-Indizes unterstützt, wobei GIN der wirksamste davon ist.json
undjsonb
Datentypen und Funktionen .Das Handbuch geht so weit, Folgendes vorzuschlagen:
Meine kühne Betonung.
Die Leistung profitiert von allgemeinen Verbesserungen der GIN-Indizes.
Postgres 9.5
Komplette
jsonb
Funktionen und Bediener. Fügen Sie weitere Funktionen hinzu, die Siejsonb
an Ort und Stelle bearbeiten und anzeigen können.quelle
Verwenden Sie bei Postgres 9.3+ einfach den
->
Operator. Beispielsweise,SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram;
Unter http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/ finden Sie einige schöne Beispiele und ein Tutorial.
quelle
data
mit einem JSON-Dokument benannt sein :{images:{thumbnail:{url:'thumbnail.jpg'}}}
. Lassen Sie uns wissen, wie Ihre Daten aussehen und welche Abfrage fehlschlägt.SELECT data->'%'->'thumbnail'->'url' AS thumb FROM instagram;
::json
wie in anderen Beiträgen beschrieben. Beachten Sie auch, dass der->
Bediener einen Fehler ausgibt, wenn Sie versuchen, auf eine Eigenschaft zuzugreifen, die nicht vorhanden ist (dh wenn Sie JSON versetzt haben):ERROR: column "jsonPropertyYouWant" does not exist
Verwenden Sie mit postgres 9.3 -> für den Objektzugriff. 4 Beispiel
seed.rb
Schienen c
kehrt zurück
Sie können weiter verschachteln
Rückkehr
quelle