Я намагаюся перевірити 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.