Postgresql: как запросить массивы JSONb, содержащие некоторые значения

У меня есть эта таблица:

введите здесь описание изображения

CREATE TABLE lawyer (
  id SERIAL PRIMARY KEY,
  data jsonb
);

INSERT INTO lawyer (data) VALUES
    ('{"a": 1}'),
    ('{"tags":["derecho", "civil", "laboral", "penal"]}'),
    ('{"tags":["derecho", "penal"]}')
;

То, что я хочу, это запрос JSONb в postgres, когда мне нужно найти пример любой записи, которая содержит «гражданское» OR «дерехо»


person Jeka    schedule 09.06.2016    source источник
comment
Возможный дубликат Postgres JSONB: значения запроса в массиве JSON   -  person bjmc    schedule 09.06.2016


Ответы (2)


Наконец нашел способ сделать это:

Храните массивы json непосредственно как верхний уровень:

INSERT INTO lawyer (data) VALUES
    ('["derecho","laboral","penal"]'),
    ('["derecho", "civil", "laboral", "penal"]'),
    ('["derecho", "penal"]')
;

SELECT * 
FROM lawyer 
WHERE data ? 'penal';

Результат:

введите здесь описание изображения

person Jeka    schedule 09.06.2016

Для тех, кто ищет ответ для исходной структуры данных, вот SQL:

SELECT * FROM lawyer WHERE lawyer.data->'tags' ? 'penal'
person ChrisJ    schedule 06.09.2016