PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में Json सरणी से तत्व कैसे प्राप्त करें

मुझे यकीन नहीं है कि आपके पास 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;

SQLFiddle

दुर्भाग्य से, आप अपने डेटा के साथ किसी भी इंडेक्स का उपयोग नहीं कर सकते। ऐसा करने के लिए आपको पहले अपना स्कीमा ठीक करना होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वाईआई फ्रेमवर्क:सक्रिय रिकॉर्ड वर्ग के लिए तालिका डेटाबेस में नहीं मिल सकती है

  2. Postgres में उपनाम के साथ नेस्टेड SELECT COUNT कैसे बनाएं

  3. परिवर्तन तालिका पोस्टग्रेज में बहुत धीमी है

  4. Postgresql कॉन्फ़िग फ़ाइल कहाँ है:विंडोज़ पर 'postgresql.conf'?

  5. psql:FATAL:भूमिका पोस्टग्रेज मौजूद नहीं है (-h लोकलहोस्ट विकल्प के साथ)