Вот пример объекта json
rawJSON = [
{"a":0, "b":7},
{"a":1, "b":8},
{"a":2, "b":9}
]
И у меня есть таблица, которая по сути выглядит так.
demo Table
id | ...(other columns) | rawJSON
------------------------------------
0 | ...(other columns info) | [{"a":0, "b":7},{"a":1, "b":8}, {"a":2, "b":9}]
1 | ...(other columns info) | [{"a":0, "b":17},{"a":11, "b":5}, {"a":12, "b":5}]
Я хочу вернуть строку, которая внутриRawJSON имеет значение от "a" менее 2 И значение от "b" менее 8. ОНИ ДОЛЖНЫ БЫТЬ ИЗ ОДНОГО ОБЪЕКТА JSON.
По сути, запрос будет выглядеть примерно так
SELECT *
FROM demo
WHERE FOR ANY JSON OBJECT in rawJSON column -> "a" < 2 AND -> "b" < 8
И потому вернется
id | ...(other columns) | rawJSON
------------------------------------
0 | ...(other columns info) | [{"a":0, "b":7},{"a":1, "b":8}, {"a":2, "b":9}]
Я искал из нескольких сообщений здесь, но не смог понять это. https://dba.stackexchange.com/questions/229069/extract-json-array-of-numbers-from-json-array-of-objects https://dba.stackexchange.com/questions/54283/how-to-превратитьjson-массиввмассивpostgres
Я думал о создании функции plgpsql, но не смог понять.
Любой совет, я был бы очень признателен!
Спасибо!!
Я хотел бы избежать бокового перекрестного соединения, потому что это сильно замедлит работу.