आपको शीर्ष स्तरीय सरणियों को अलग करना चाहिए और वहां से तत्वों की जांच करनी चाहिए:
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%' जैसी खोज इंडेक्स आधारित से लाभान्वित होगी। pg_trgm से दूर क्योंकि वे पारंपरिक btree अनुक्रमणिका का उपयोग नहीं कर सकते।
संपादित करें:@ टिप्पणियों में एबेलिस्टो की क्वेरी बेहतर है क्योंकि यह अधिक प्रदर्शनकारी होनी चाहिए, खासकर यदि सामग्री में हजारों तत्व शामिल हो सकते हैं:
select * from test
where exists
(select 1
from jsonb_array_elements(content) jae(elems)
where elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
);