Таблица: test
, столбец JSONB: content
:
create table test (id bigserial primary key, content jsonb);
content
содержит список списков фиксированной длины:
insert into test values (1, '[["first 1", "second 3"]]');
insert into test values (2, '[["first 1", "second 2"], ["first 2", "second 3"]]');
insert into test values (3, '[["first 1", "second 2"], ["first 1", "second 3"]]');
insert into test values (4, '[["first 2", "second 3"], ["first 1", "second 2"], ["first 1", "second 2"]]');
Что такое правильный Postgresсинтаксис для запроса, который возвращает все строки, где хотя бы один из элементов content
удовлетворяет (first element = "first 1")
AND (second element ILIKE "%3%")
?
То есть в приведенном выше примере следует выбратьстроки 1 и 3, но не 2 или 4.
Бонусный вопрос : каков самый эффективный способ выполнить такой запрос (если существует несколько альтернатив)?Имеет ли смысл заглянуть в GIN через JSONB с pg_trgm
?(Есть миллионы строк, значения внутренней строки обычно имеют длину 10-100 символов, и каждый список content
содержит 0-1000 списков (чаще всего 0).)
Спасибо!