У меня есть поле json (хранится как текст) в таблице, и я хочу извлечь определенные элементы из json, у которых есть указанный ID во вложенном массиве (внутри json).Фильтр PostgreSQL на основе идентификатора в вложенном массиве json
Каждый элемент json имеет атрибут type
и атрибут value
. Кроме того, value
имеет атрибут (массив) GRI
, который я хотел бы использовать для фильтрации. Вот образец столбцу один streamfield:
[{"type": "paragraph",
"value": {"paragraph": "<p>Sample paragraph 91</p>", "GRI": [27, 91, 211]},
{"type": "paragraph",
"value": {"paragraph": "<p>Sample paragraph 191</p>", "GRI": [13, 191, 271]}]
Этот запрос вид работ:
SELECT value FROM "sampletable" r, json_array_elements(r.streamfield::json) obj
WHERE obj->>'type' = 'paragraph' AND obj#>>'{value,GRI}' LIKE '%91%';
Это дало бы мне все элементы с ID 91. Но и с ID 191, 291 и т.д .. .
Так как я могу преобразовать оператор `obj # >> '{value, GRI}' в массив, чтобы я мог фильтровать на основе указанного ID?
Вот SQLFiddle для этого: http://sqlfiddle.com/#!15/184e1/1
Edit: выяснены структура JSON
Какая версия PostgreSQL? – Nicarus
Postgres версия 9.3.10 на AWS RDS –