Postgres 9.2
Cituji Andrewa Dunstana ze seznamu hackerů pgsql:
V určité fázi možná budou nějaké funkce pro zpracování json (na rozdíl od funkcí produkujících json), ale ne v 9.2.
Nebrání mu v poskytnutí příkladu implementace v PLV8, který by měl vyřešit váš problém. (Odkaz je nyní mrtvý, podívejte se místo něj na moderní PLV8.)
Postgres 9.3
Nabízí arzenál nových funkcí a operátorů pro přidání „json-processing“.
- Příručka o nových funkcích JSON.
- Postgres Wiki o nových funkcích na str. 9.3.
Odpověď na původní otázku v Postgres 9.3:
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
Pokročilý příklad:
- Kombinace dotazů s vnořeným polem záznamů v datovém typu JSON
Pro větší tabulky možná budete chtít přidat výrazový index pro zvýšení výkonu:
- Index pro nalezení prvku v poli JSON
Postgres 9.4
Přidá jsonb
(b pro "binární", hodnoty jsou uloženy jako nativní typy Postgres) a ještě více funkcí pro obě typy. Kromě indexů výrazů uvedených výše, jsonb
podporuje také indexy GIN, btree a hash, přičemž GIN je z nich nejúčinnější.
- Příručku
json
ajsonb
datové typy a funkce. - Postgres Wiki na JSONB na str. 9.4
Manuál jde tak daleko, že navrhuje:
Obecně platí, že většina aplikací by měla preferovat ukládání dat JSON jako
jsonb
, pokud neexistují zcela specializované potřeby, jako jsou starší předpoklady o uspořádání klíčů objektů.
Tučné zdůraznění moje.
Výkon těží z obecných vylepšení indexů GIN.
Postgres 9.5
Vyplňte jsonb
funkce a operátory. Přidejte další funkce pro manipulaci s jsonb
na místě a pro zobrazení.
- Hlavní dobrá zpráva v poznámkách k vydání Postgres 9.5.