можно.
сформирован json, с ID для запроса, из примера выше.
имеется поле jsonb со структурой
{
"id": 5,
"field": "бла",
"foeld2": "бла2"
}
id тут точно такие же что и из примера выше.
ранее я их искал
field->'id' IN ("2", "3")
Это нормально?
либо может как то к тому поиску что выше можно привести?
Типа, такого, если я правильно понял вопрос: SELECT * FROM t WHERE data @> ANY(ARRAY['[{"id": 7}]'::jsonb, '[{"id": 5}]'::jsonb]);
Для поиска jsonb-массивов, содержащих элементы с id из заданного списка, можно еще использовать jsonpath с переменной, передавая через нее список id: CREATE TABLE test AS SELECT ( SELECT jsonb_agg(jsonb_build_object('id', id)) FROM jsonb_array_elements(ids) id ) jb FROM jsonb_array_elements('[[1,2], [3,4,5], [6,7,8,9]]') ids; SELECT * FROM test WHERE jsonb_path_match(jb, '$[*].id == $ids[*]', '{"ids": [1, 7]}'); [{"id": 1}, {"id": 2}] [{"id": 6}, {"id": 7}, {"id": 8}, {"id": 9}] Кроме того, можно сразу извлечь сами элементы с нужными id: SELECT jsonb_path_query(jb, '$[*] ? (@.id == $ids[*])', '{"ids": [1, 7]}') FROM test; {"id": 1} {"id": 7} Но в отличие от jb @> ANY(ARRAY[...]) по индексу это работать не будет, пока в jsonpath не добавят давно имеющиеся у нас расширения для конструирования массивов и объектов, чтобы стало возможно писать так: jb @@ '$[*].id == [1, 7]' См. https://www.postgresql.org/message-id/flat/e0fe4f7b-da0b-471c-b3da-d8adaf314357%40postgrespro.ru Собираемся в ближайшее время выпустить их у себя в PgPro Standard, так как, похоже, бессмысленно ждать появления ревьюеров.
Обсуждают сегодня