Задать вопрос
un1t
@un1t

Как извлечь данные из JSON?

В таблице есть jsonb поле, назовем его "data"

Пример того что там находится
{
	"items": [
		{"name": "A", "category_id": 1},
		{"name": "B", "category_id": 2}
	]
}


Нужно найти все строки в таблице которых присутсвуют категории 1, 3 или 5.
Т.е. если извлечть эти категории в массив int[] то можно воспользоваться оператором &&
SELECT * FROM table WHERE some_magic_extraction(data) && array[1,3,5];
  • Вопрос задан
  • 2125 просмотров
Подписаться 1 Оценить Комментировать
Решение пользователя Melkij К ответам на вопрос (3)
Melkij
@Melkij
DBA Team для вашего PostgreSQL?
Если не нужен join со значениями, а только фильтр - то
where array(select (j->>'category_id')::int from jsonb_array_elements(data->'items') j) && array[1,3,5];

Можно загнать подзапрос с построением массива в immutable хранимку и повесить по ней gin или gist индекс.
Ответ написан
Комментировать