मुझे यकीन नहीं है कि आपके पास json[]
है (json
. का PostgreSQL सरणी मान) टाइप किया गया कॉलम, या json
टाइप किया गया कॉलम, जो एक JSON सरणी प्रतीत होता है (जैसे आपके उदाहरण में)।
किसी भी मामले में, आपको पूछताछ से पहले अपनी सरणी का विस्तार करने की आवश्यकता है। json[]
. के मामले में , आपको unnest(anyarray)
; json
. में JSON सरणियों के मामले में टाइप किया गया कॉलम, आपको json_array_elements(json)<का उपयोग करना होगा /कोड>
(और LATERAL
joins -- वे मेरे उदाहरणों में निहित हैं):
select t.id,
each_section ->> 'name' section_name,
each_attribute ->> 'attrkey3' attrkey3
from t
cross join unnest(array_of_json) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where (each_attribute -> 'attrkey3') is not null;
-- use "where each_attribute ? 'attrkey3'" in case of jsonb
select t.id,
each_section ->> 'name' section_name,
each_attribute ->> 'attrkey3' attrkey3
from t
cross join json_array_elements(json_array) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where (each_attribute -> 'attrkey3') is not null;
दुर्भाग्य से, आप अपने डेटा के साथ किसी भी इंडेक्स का उपयोग नहीं कर सकते। ऐसा करने के लिए आपको पहले अपना स्कीमा ठीक करना होगा।