Bạn nên tách các mảng cấp cao nhất ra và kiểm tra các phần tử từ đó:
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;
Về cách tốt nhất để làm điều này, điều đó phụ thuộc rất nhiều vào dữ liệu thực tế của bạn - có bao nhiêu hàng, độ lớn của các cấu trúc jsonb này, v.v. Tuy nhiên, nói chung, một tìm kiếm như ilike '% 3%' sẽ được hưởng lợi từ các chỉ mục dựa trên tắt pg_trgm vì họ không thể sử dụng chỉ mục btree truyền thống.
Chỉnh sửa:Truy vấn của @ Abelisto trong phần nhận xét tốt hơn vì nó phải hoạt động hiệu quả hơn, đặc biệt nếu nội dung có thể chứa 1000 phần tử:
select * from test
where exists
(select 1
from jsonb_array_elements(content) jae(elems)
where elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
);