Postgres 9.2
Cytuję Andrew Dunstana z listy pgsql-hackerów:
Na pewnym etapie prawdopodobnie pojawią się funkcje przetwarzania json (w przeciwieństwie do tworzenia json), ale nie w wersji 9.2.
Nie przeszkadza mu to w podaniu przykładowej implementacji w PLV8, która powinna rozwiązać Twój problem. (Link nie działa, zobacz zamiast tego nowoczesny PLV8.)
Postgres 9.3
Oferuje arsenał nowych funkcji i operatorów, aby dodać „przetwarzanie json”.
- Podręcznik dotyczący nowej funkcjonalności JSON.
- Wiki Postgres o nowych funkcjach na stronie 9.3.
Odpowiedź na pierwotne pytanie w Postgresie 9.3:
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
Przykład zaawansowany:
- Kombinacje zapytań z zagnieżdżoną tablicą rekordów w typie danych JSON
W przypadku większych tabel możesz dodać indeks wyrażenia, aby zwiększyć wydajność:
- Indeks do znajdowania elementu w tablicy JSON
Postgres 9.4
Dodaje jsonb
(b dla "binarnego", wartości są przechowywane jako natywne typy Postgresa) i jeszcze więcej funkcji dla obu typy. Oprócz indeksów wyrażeń wspomnianych powyżej, jsonb
obsługuje również indeksy GIN, btree i hash, z których GIN jest najpotężniejszym z nich.
- Podręcznik dotyczący
json
ijsonb
typy danych i funkcje. - Wiki Postgres w JSONB na stronie 9.4
Instrukcja sugeruje nawet:
Ogólnie większość aplikacji powinna preferować przechowywanie danych JSON jako jsonb
, chyba że istnieją dość wyspecjalizowane potrzeby, takie jak założenia dotyczące kolejności kluczy obiektowych.
Pogrubiony nacisk na moje.
Wydajność zyskuje dzięki ogólnym ulepszeniom indeksów GIN.
Postgres 9.5
Uzupełnij jsonb
funkcje i operatory. Dodaj więcej funkcji, aby manipulować jsonb
na miejscu i do wyświetlania.
- Główne dobre wieści w informacjach o wydaniu Postgresa 9.5.