Szukam niektórych dokumentów i / lub przykładów nowych funkcji JSON w PostgreSQL 9.2.
W szczególności biorąc pod uwagę serię rekordów JSON:
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
Jak napisać SQL, aby znaleźć rekord według nazwy?
W waniliowym SQL:
SELECT * from json_data WHERE "name" = "Toby"
Oficjalna instrukcja dla programistów jest dość rzadka:
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
Aktualizacja I
Mam ułożyła sens szczegółowo, co jest obecnie możliwe z PostgreSQL 9.2 . Korzystając z niektórych niestandardowych funkcji, można wykonywać następujące czynności:
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
Aktualizacja II
Teraz przeniosłem moje funkcje JSON do ich własnego projektu:
PostSQL - zestaw funkcji do przekształcania PostgreSQL i PL / v8 w całkowicie niesamowity magazyn dokumentów JSON
sql
json
postgresql
postgresql-9.2
postgresql-9.3
Toby Hede
źródło
źródło
Odpowiedzi:
Postgres 9.2
Cytuję Andrew Dunstana na liście hakerów pgsql :
Nie przeszkadza mu to w dostarczeniu przykładowej implementacji w PLV8 która powinna rozwiązać Twój problem.
Postgres 9.3
Oferuje arsenał nowych funkcji i operatorów, aby dodać „przetwarzanie json”.
Odpowiedź na pierwotne pytanie w Postgres 9.3:
Zaawansowany przykład:
W przypadku większych tabel możesz dodać indeks wyrażeń w celu zwiększenia wydajności:
Postgres 9.4
Dodaje
jsonb
(b dla „binarnego”, wartości są przechowywane jako rodzime typy Postgres) i jeszcze więcej funkcjonalności dla obu typów. Oprócz wspomnianych wyżej indeksów ekspresjijsonb
obsługuje także indeksy GIN, btree i hash , przy czym GIN jest najsilniejszy z nich.json
orazjsonb
typy i funkcje danych .Podręcznik sięga tak daleko, jak sugeruje:
Odważny nacisk moje.
Wydajność korzysta z ogólnych ulepszeń indeksów GIN.
Postgres 9.5
Kompletne
jsonb
funkcje i operatory. Dodaj więcej funkcji do manipulowaniajsonb
w miejscu i do wyświetlania.źródło
W Postgres 9.3+ wystarczy użyć
->
operatora. Na przykład,SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram;
zobacz http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/, aby uzyskać kilka dobrych przykładów i samouczek.
źródło
data
z dokumentem JSON:{images:{thumbnail:{url:'thumbnail.jpg'}}}
. Daj nam znać, jak wyglądają Twoje dane i jakie zapytanie nie działa.SELECT data->'%'->'thumbnail'->'url' AS thumb FROM instagram;
::json
jak opisano w innych postach. Pamiętaj również, że->
operator zgłasza błąd, jeśli spróbujesz uzyskać dostęp do właściwości, która nie istnieje (tj. Jeśli rozłożyłeś JSON):ERROR: column "jsonPropertyYouWant" does not exist
Z postgres 9.3 użyj -> do dostępu do obiektu. 4 przykład
seed.rb
szyny c
zwroty
Możesz kontynuować zagnieżdżanie
powrót
źródło