У меня есть отчет в формате JSON, хранящийся в поле таблицы базы данных PostgreSQL.
Скажем, (упрощенный) формат таблицы:
Column | Type
-------------------+----------------------------
id | integer
element_id | character varying(256)
report | json
и структура данных в отчетах выглядит следующим образом
{
"section1":
"test1": {
"outcome": "nominal",
"results": {
"value1": 34.,
"value2": 56.
}
},
"test2": {
"outcome": "warning",
"results": {
"avg": 4.5,
"std": 21.
}
},
...
"sectionN": {
...
}
}
То есть существует N ключей на первом уровне ( разделы ), каждый из которых является объектом с набором ключей ( tests ), с исход и набор переменных результаты в виде (key, value)
пар.
Мне нужно выполнить фильтрацию на основе внутренних ключей JSON. Более конкретно, в этом примере я хочу знать, возможно ли, используя только SQL, получить элементы, которые имеют, например, значение std
в разделе results выше определенного порога, скажем 10. Я даже могу знать, что std
находится в test2
, но я не знаю a priori , в каком разделе. Например, с этим фильтром (test2.std > 10.
) появится запись с примерами данных, показанными выше, поскольку переменная std
в тесте test2
имеет это значение, равное 21. (> 10.).
Другим, более простым фильтром может быть запрос всех записей, для которых test2.outcome
не nominal
.