トップレベルの配列を分割し、そこから要素を確認する必要があります:
select distinct id, content
FROM test
JOIN lateral (
select elems
FROM jsonb_array_elements(content) jae(elems)
) all_arrays ON TRUE
WHERE elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
ORDER BY 1;
これを行うための最良の方法については、実際のデータ(行数、これらのjsonb構造の大きさなど)に大きく依存します。ただし、一般に、ilike'%3%'のような検索は、インデックスベースのメリットがあります。従来のbtreeインデックスを使用できないため、pg_trgmからオフにします。
編集:特にコンテンツに数千の要素を含めることができる場合は、パフォーマンスが向上するはずなので、コメント内の@Abelistoのクエリの方が優れています:
select * from test
where exists
(select 1
from jsonb_array_elements(content) jae(elems)
where elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
);