Я намагаюся перевірити jsonтип у PostgreSQL 9.3.
У мене jsonстовпчик, який називається dataв таблиці, називається reports. JSON виглядає приблизно так:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Я б хотів запитати таблицю щодо всіх звітів, які відповідають значенню 'src' в масиві 'об’єкти'. Наприклад, чи можна запитувати БД для всіх звітів, які відповідають 'src' = 'foo.png'? Я успішно написав запит, який може відповідати "background":
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Але оскільки "objects"має масив значень, я, здається, не можу написати щось, що працює. Чи можливо запитувати БД для всіх звітів, які відповідають 'src' = 'foo.png'? Я переглянув ці джерела, але все ще не можу його отримати:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Як зробити запит, використовуючи поля всередині нового типу даних PostgreSQL JSON?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Я також пробував такі речі, але безрезультатно:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Я не експерт SQL, тому не знаю, що я роблю неправильно.
jsonb/ pg 9.4. Убік: для простого випадку (1 рівень гніздування)->оператор також виконує трюкjsonу п. 9.3.