मुख्य सामग्री पर जाएं
मॉड्यूल 15 · पाठ 1 का 2पाठ्यक्रम में 56/57~15 min
मॉड्यूल पाठ (1/2)

JSON और JSONB एकीकरण

JSON और JSONB एकीकरण

PostgreSQL ने NoSQL के विशिष्ट गतिशील, तरल लचीलेपन के साथ SQL की आश्वस्त करने वाली, रॉक-सॉलिड ACID प्रकृति को जोड़कर डेटाबेस के नियमों को फिर से लिखा। इसने JSON डेटा संग्रहीत करने के लिए मूल रूप से समर्पित कॉलम पेश करके ऐसा किया।

सचेत रहें: पोस्टग्रेज़ में लगभग हमेशा JSONB का उपयोग करने की अनुशंसा की जाती है। "बी" का मतलब बाइनरी है: इन कॉलमों में संग्रहीत JSON दस्तावेज़ अपनी विशुद्ध रूप से पाठ्य स्वरूपण खो देते हैं, लेकिन वे मान्य होने, बहुत उच्च प्रदर्शन के साथ पूछताछ करने, हेरफेर करने और यहां तक ​​​​कि क्लासिक बी-ट्री या जीआईएन इंडेक्स के साथ अनुक्रमित करने की क्षमता प्राप्त करते हैं।

JSON को नेविगेट करना: "एरो" ऑपरेटर

दुर्भाग्य से ecommerce डेटाबेस में वर्तमान में कोई पूर्वनिर्धारित शुद्ध JSON कॉलम नहीं है। हालाँकि, हम अस्थायी JSON मान बना सकते हैं और उन्हें पाठ से "कास्ट" कर सकते हैं!

JSON के साथ काम करते समय, ऑब्जेक्ट और सरणियों में ड्रिल करने वाले ऑपरेटर -> होते हैं (डेटा को उसके शुद्ध jsonb/json रूप में रखते हैं) या इसका "विस्तारित" संस्करण ->> (सामने आए JSON डेटा को टेक्स्ट में परिवर्तित करता है)।

अकादमिक उदाहरण, मानो कोई "मेटाडेटा" JSON कॉलम मौजूद हो:

SQL
-- Look up the value associated with the info key
SELECT metadata->'info' FROM users;

-- Drill into info, and grab city as text
SELECT metadata->'info'->>'city' FROM users;
व्यायाम#sql.m15.l1.e1
प्रयास: 0लोड हो रहा है...

आइए तुरंत JSON से प्रश्न पूछें। इस json अक्षरशः \`'{"user": {"name": "Mario"}}'::json\` को प्रोजेक्ट करें और 'name' निकालने के लिए टेक्स्ट संस्करण (\`->>\`) के साथ संयुक्त \`->\` ऑपरेटर का उपयोग करें, निकाले गए कॉलम को 'user_name' नाम दें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

::json या ::jsonb पर कास्ट करें, और ->'user'->>'name' का उपयोग करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#sql.m15.l1.e2
प्रयास: 0लोड हो रहा है...

यदि हम एक सरणी पास करते हैं तो क्या होगा? Postgres में json_b में ऐरे एक्सेस INDEX (शून्य-आधारित) द्वारा काम करता है। \`'["A", "B", "C"]'::json\` से दूसरे तत्व को टेक्स्ट के रूप में निकालें और इसे 'अक्षर' नाम दें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

->>1 (यह शून्य-आधारित है!)

3 प्रयासों के बाद समाधान उपलब्ध है