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

plpgsql में एक jsonb नल की पहचान करने के लिए सर्वोत्तम अभ्यास

आपके लिंक किए गए दोनों उत्तरों में समाधान हैं, लेकिन एक सर्वव्यापक उत्तर होना अच्छा हो सकता है।

Postgres दृढ़ता से टाइप किया गया है। इसके कार्य और ऑपरेटर विशिष्ट प्रकार लौटाते हैं।

-> जेसनबी लौटाता है। इसकी तुलना SQL नल से नहीं बल्कि jsonb नल से करें

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->'i_am_null' = 'null'::jsonb;
 ?column? 
----------
 t
(1 row)

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->'a_string' = 'null'::jsonb;
 ?column? 
----------
 f
(1 row)

->> टेक्स्ट लौटाता है और jsonb null को SQL null में बदल देगा

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->>'i_am_null' is null;
 ?column? 
----------
 t
(1 row)

test=# select '{"i_am_null": null, "a_string": "null"}'::jsonb->>'a_string' is null;
 ?column? 
----------
 f
(1 row)

ध्यान दें कि जबकि jsonb नल सिर्फ एक और मान है, SQL नल बहुत खास है। शून्य एक मूल्य नहीं है, यह एक मूल्य की कमी है। नल बराबर कुछ नहीं, यहां तक ​​कि शून्य भी नहीं . ऐसा लग सकता है कि अशक्त से jsonb को कास्ट करना jsonb नल का उत्पादन करना चाहिए, लेकिन SQL मानक के लिए आवश्यक है कि null केवल null पर कास्ट हो अन्यथा इसका मतलब होगा कि शून्य कुछ के बराबर है।

यही कारण है कि jsonb नल को अशक्त में परिवर्तित किया जा सकता है, लेकिन अशक्त को jsonb नल में नहीं डाला जाता है। null::jsonb शून्य है . यह असुविधाजनक है, लेकिन SQL मानक द्वारा आवश्यक है। यह एक कारण है कि 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. अजगर के साथ परेशानी manage.py माइग्रेट -> psycopg2 नाम का कोई मॉड्यूल नहीं है

  2. दृश्य पर ट्रिगर निष्पादित करें?

  3. Homebrew पोस्टग्रेज टूटा हुआ

  4. PostgreSQL त्रुटि:पुनर्प्राप्ति के साथ विरोध के कारण कथन रद्द करना

  5. विंडोज में PostgreSQL कंप्रेस्ड आर्काइव लॉग्स