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

'अज्ञात' और टाइप अनुमान के लिए नियम क्या है?

वहाँ वास्तव में तीन प्रश्न हैं जिनका मैं उत्तर देने का प्रयास करूँगा।

  1. unknown . का उद्देश्य क्या है? ?

    यह डेटा प्रकार शुरू में एनयूएलएल और एसक्यूएल स्टेटमेंट में स्ट्रिंग अक्षर को सौंपा गया है। यदि ऐसे शाब्दिकों को टाइप किया गया था text तुरंत, सही प्रकार का अनुमान लगाना कठिन होगा।

    उदाहरण के लिए, आप myfunc('hello') . चाहते हैं myfunc(character varying) का आह्वान करने के लिए , लेकिन text . से कोई अंतर्निहित प्रकार नहीं डाला गया है से character varying (और अगर आपने इसे बनाया है तो यह अस्पष्टता पैदा करेगा)।

  2. क्यों SELECT null unknown . प्रकार का कॉलम लौटाएं ?

    पारंपरिक उत्तर है:क्योंकि उपयोगकर्ता ने प्रकार निर्दिष्ट नहीं किया था।

    हालाँकि, यह व्यवहार समस्याग्रस्त रहा है। उदाहरण के लिए, यदि आप इस तरह की तालिका बनाते हैं:

    CREATE TABLE test
       AS SELECT 'hello';
    

    आप unknown . प्रकार के कॉलम के साथ समाप्त होंगे , जो अवांछित है और आगे भी समस्याएं पैदा करेगा। प्रकार unknown वास्तव में उपयोगकर्ता दृश्यमान नहीं होना चाहिए, बल्कि एक कार्यान्वयन विवरण होना चाहिए।

    नतीजतन, यह कमिट PostgreSQL v10 से व्यवहार को बदल दिया है:अब कोई भी unknown SELECT . में छोड़ दिया गया है या RETURNING सूची को text के लिए बाध्य किया जाता है , और तालिकाएं unknown . प्रकार के स्तंभों के साथ नहीं बनाई जा सकतीं ।

  3. SELECT NULL UNION SELECT 42 काम करते हैं, लेकिन नहीं SELECT NULL UNION SELECT NULL UNION SELECT 42 ?

    यह टाइप कन्वर्ज़न नियम के कारण देय है .UNION साहचर्य छोड़ दिया गया है, इसलिए बाद की क्वेरी की व्याख्या इस प्रकार की जाती है

    (SELECT NULL UNION SELECT NULL) UNION SELECT 42;
    

    अब पहला UNION डेटा प्रकार text . का समाधान करता है नियम 3 के कारण:

    दूसरे UNION . के प्रकार को हल करने का प्रयास करते समय यह त्रुटि उत्पन्न करता है नियम 4 के कारण:

    दूसरी ओर, क्वेरी में

    SELECT NULL UNION SELECT 42;
    

    “NULL” का प्रकार unknown है , और “42” का प्रकार integer . है (दशमलव बिंदु के बिना संख्यात्मक शाब्दिक के लिए चुना गया प्रकार)।

    नियम 5

    यहां लागू नहीं होता, क्योंकि integer अपनी श्रेणी में पसंदीदा प्रकार नहीं है (जो कि oid . होगा) और double precision ), इसलिए नियम 6 का उपयोग किया जाता है:

    इसका परिणाम एक प्रकार का integer होता है ।




  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. जेपीए में 2 तिथियों के बीच दिनों की संख्या गिनें

  3. PostgreSQL में बहु-स्तंभ अनुक्रमणिका बनाना, जिसमें अदिश और सरणी स्तंभ दोनों शामिल हैं

  4. विंडो फ़ंक्शंस के साथ मेरी पोस्टग्रेज़ तालिका में विभाजन के समूहों की गणना कैसे करें?

  5. पोस्टग्रेस फ़ंक्शन में टेक्स्ट इनपुट को कॉलम नाम के रूप में कैसे उपयोग करें?