Я пытаюсь проверить json
тип в PostgreSQL 9.3.
У меня есть json
столбец с именем data
в таблице reports
. JSON выглядит примерно так:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Я хотел бы запросить таблицу для всех отчетов, которые соответствуют значению 'src' в массиве 'objects'. Например, можно ли запросить в БД все соответствующие отчеты '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.