Как запросить массив Json в jsonb в Postgresql - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть столбец jsonb, в котором есть следующие строки

ROW1:

 [
        {
            "cpe23Uri": "cpe:2.3:a:sgi:irix:3.55:*:*:*:*:*:*:*",
            "active": true
        },
        {
            "cpe23Uri": "cpe:2.3:a:university_of_washington:imap:10.234:*:*:*:*:*:*:*",
            "active": true
        }
    ]

ROW 2:

 []

ROW 3:

[
    {
        "cpe23Uri": "cpe:2.3:o:sgi:irix:*:*:*:*:*:*:*:*",
        "active": true
    }
]

Я хочу найти строки, которые содержат sgi: irix в ключе cpe23Uri

Какой запрос я должен использовать для лучшей производительности?

1 Ответ

1 голос
/ 03 февраля 2020

Вы можете использовать условие exists с коррелированным подзапросом, который использует jsonb_array_element() для удаления и поиска в массиве:

select *
from mytable t
where exists (
    select 1
    from jsonb_array_elements(t.js) x
    where  x->>'cpe23Uri' like '%sgi:irix%'
);

Демонстрация на DB Fiddle

...