PostgreSQL JSON डेटा संग्रहीत करने के लिए दो प्रकार प्रदान करता है: json
और jsonb
। इन डेटा प्रकारों के लिए कुशल क्वेरी तंत्र को लागू करने के लिए, PostgreSQL भी धारा 8.14.6 में वर्णित jsonpath डेटा प्रकार प्रदान करता है ।
json
और jsonb
डेटा प्रकार इनपुट के रूप में मूल्यों के लगभग समान सेट स्वीकार करते हैं। प्रमुख व्यावहारिक अंतर दक्षता में से एक है।
json
डेटा प्रकार भंडार इनपुट पाठ, जो प्रसंस्करण कार्यों प्रत्येक निष्पादन पर Reparse चाहिए की एक सटीक प्रतिलिपि; हालांकि jsonb
डेटा एक विघटित द्विआधारी प्रारूप में संग्रहीत होता है जो अतिरिक्त रूपांतरण ओवरहेड के कारण इनपुट के लिए थोड़ा धीमा बनाता है, लेकिन प्रक्रिया करने के लिए काफी तेज है, क्योंकि किसी भी रिपार्सिंग की आवश्यकता नहीं है।jsonb
इंडेक्सिंग का भी समर्थन करता है, जो एक महत्वपूर्ण लाभ हो सकता है।
क्योंकि json
टाइप इनपुट पाठ की एक सटीक प्रतिलिपि संग्रहीत करता है, यह टोकन के बीच शब्दार्थ-निरर्थक सफेद स्थान, साथ ही साथ JSON ऑब्जेक्ट्स के भीतर कुंजियों के क्रम को संरक्षित करेगा। इसके अलावा, यदि मान के भीतर JSON ऑब्जेक्ट में एक से अधिक बार एक ही कुंजी होती है, तो सभी कुंजी / मान जोड़े रखे जाते हैं। (प्रोसेसिंग फ़ंक्शंस अंतिम मान को ऑपरेटिव के रूप में मानते हैं।) इसके विपरीत;jsonb
सफेद स्थान को संरक्षित नहीं करता है, ऑब्जेक्ट कुंजियों के क्रम को संरक्षित नहीं करता है, और डुप्लिकेट ऑब्जेक्ट कुंजियों को नहीं रखता है। यदि डुप्लिकेट कुंजियों को इनपुट में निर्दिष्ट किया जाता है, तो केवल अंतिम मान रखा जाता है।
सामान्य तौर पर, अधिकांश अनुप्रयोगों को JSON डेटा को स्टोर करना पसंद करना चाहिए
jsonb
, जब तक कि कोई विशेष आवश्यकता न हो, जैसे कि ऑब्जेक्ट कुंजी के आदेश के बारे में विरासत की धारणाएं।
PostgreSQL प्रति डेटाबेस में केवल एक वर्ण सेट एन्कोडिंग की अनुमति देता है। इसलिए JSON प्रकारों के लिए JSON विनिर्देशन के अनुरूप होना संभव नहीं है, जब तक कि डेटाबेस एन्कोडिंग UTF8 न हो। डेटाबेस एन्कोडिंग में प्रतिनिधित्व नहीं किया जा सकता है कि पात्रों को सीधे शामिल करने का प्रयास विफल हो जाएगा; इसके विपरीत, ऐसे अक्षर जिन्हें डेटाबेस एन्कोडिंग में दर्शाया जा सकता है, लेकिन UTF8 में नहीं।