Как мне настроить поиск в массиве jsonb? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть colA, который является столбцом jsonb с массивом. Вот несколько примеров строк:

["postgresql", "mysql", "elasticsearch"]
["python", "perl"]

Я пытаюсь найти, есть ли в массиве "postgresql" или "mysql":

SELECT 'colA @> ANY (ARRAY ['["postgresql"]', '["mysql"]']::jsonb[])' FROM mytable

Возвращает первый ряд. Теперь, поскольку пользователи будут передавать данные, мне нужно параметризовать запросы:

SELECT 'colA @> ANY (ARRAY ['[$1]', '[$2]']::jsonb[])' FROM mytable

Но я получаю:

ERROR: syntax error at or near "["

1 Ответ

1 голос
/ 03 мая 2019

Вы можете cross join таблицу с jsonb_array_elements_text() в предложении from, которая позволяет фильтровать записи в предложении where на основе соответствующих полученных значений.

select t.id,j.* from mytable t cross join 
               jsonb_array_elements_text(cola) as j(val)
 where j.val  IN ( 'postgresql','mysql');

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...