Я пытаюсь проверить 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.