Postgres 9.2
Цитирам Андрю Дънстан в списъка на pgsql-хакерите:
На някакъв етап вероятно ще има някои функции за обработка на json (за разлика от json-производство), но не и в 9.2.
Не му пречи да предостави примерна реализация в PLV8, която трябва да реши проблема ви. (Връзката вече е мъртва, вместо това вижте съвременния PLV8.)
Postgres 9.3
Предлага арсенал от нови функции и оператори за добавяне на "json-обработка".
- Ръководството за новата функционалност на JSON.
- Уикито на Postgres за новите функции в стр. 9.3.
Отговорът на оригиналния въпрос в Postgres 9.3:
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
Разширен пример:
- Комбинации от заявки с вложен масив от записи в тип данни JSON
За по-големи таблици може да искате да добавите индекс на израз, за да увеличите производителността:
- Индекс за намиране на елемент в JSON масив
Postgres 9.4
Добавя jsonb
(b за "двоичен", стойностите се съхраняват като естествени типове Postgres) и още повече функционалност за и двете видове. В допълнение към индексите на изрази, споменати по-горе, jsonb
също така поддържа GIN, btree и хеш индекси, като GIN е най-мощният от тях.
- Ръководството за
json
иjsonb
типове данни и функции. - Уикито на Postgres на JSONB в стр. 9.4
Ръководството стига дотам, че предлага:
Като цяло, повечето приложения трябва да предпочитат да съхраняват JSON данни като
jsonb
, освен ако няма доста специализирани нужди, като например наследени предположения относно подреждането на ключове за обекти.
Удебелен акцент мое.
Ползи за производителността от общи подобрения на GIN индексите.
Postgres 9.5
Попълнете jsonb
функции и оператори. Добавете още функции за манипулиране на jsonb
на място и за показване.
- Основни добри новини в бележките за версията на Postgres 9.5.