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

जेएसओएन प्रकार कॉलम को समूह/चयन कैसे करें (पीजी ::अपरिभाषित फ़ंक्शन:त्रुटि:टाइप जेसन के लिए समानता ऑपरेटर की पहचान नहीं कर सका)

दुर्भाग्य से सीधे json करने का कोई आसान तरीका नहीं है 9.3 में समानता परीक्षण।

9.3 का json type में कोई समानता ऑपरेटर नहीं है, क्योंकि यह json को डुप्लिकेट कुंजियों के साथ स्वीकार करता है (जैसा कि कई कार्यान्वयन अपेक्षित हैं)। यह स्पष्ट नहीं है कि {"a":1, "a":2} {"a":1} . के "बराबर" है या नहीं।

9.4 jsonb जोड़ता है जो अंतिम-कुंजी-जीत के आधार पर डुप्लिकेट कुंजियों को ध्वस्त कर देता है, जिससे समानता स्पष्ट हो जाती है।

regress=# SELECT '{"a":1, "a":2}'::json = '{"a":1}'::json;
ERROR:  operator does not exist: json = json
LINE 1: SELECT '{"a":1, "a":2}'::json = '{"a":1}'::json;
                                      ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

regress=# SELECT '{"a":1, "a":2}'::jsonb = '{"a":1}'::jsonb;
 ?column? 
----------
 f
(1 row)

दुर्भाग्य से, इसका मतलब है कि आप केवल 9.3 में वह नहीं कर सकते जो आप चाहते हैं।

आप json . के लिए एक कस्टम समानता ऑपरेटर लिख सकते हैं - शायद दोनों को टेक्स्ट में कास्ट करना और उस तरह से तुलना करना, लेकिन यह {"a":1, "b":2} का इलाज करेगा और {"b":2, "a":1} असमान के रूप में।

एक बेहतर विकल्प यह होगा कि PL/V8 को स्थापित किया जाए और समानता की तुलना करने के लिए V8 जावास्क्रिप्ट इंजन के json संचालन का उपयोग किया जाए।

json . के लिए एक समानता ऑपरेटर को परिभाषित करें , फिर उस ऑपरेटर का उपयोग करके एक साधारण बी-ट्री ऑपक्लास को परिभाषित करें। SQL स्तर पर दोनों करना आसान है - देखें CREATE OPERATOR और CREATE OPERATOR CLASS

एक बार ऐसा करने के बाद आप GROUP BY . में सक्षम होंगे 9.3 में json मान।

या आप केवल 9.4 बीटा1 इंस्टॉल कर सकते हैं और jsonb . का उपयोग कर सकते हैं ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में एक uuid के बड़े सिरे से बड़ा पूर्णांक बनाएं

  2. किसी व्यू पर डिलीट रूल कैसे लिखें?

  3. हिस्टोग्राम_बाउंड्स में प्रविष्टियों की अधिकतम मात्रा

  4. SQL में LOOP को शामिल करना

  5. वोटों के योग के साथ सभी पोस्ट प्राप्त करें और यदि वर्तमान उपयोगकर्ता ने प्रत्येक पोस्ट को वोट दिया है