यहाँ मुद्दा यह है कि '' as name वास्तव में मूल्य के लिए एक प्रकार निर्दिष्ट नहीं करता है। यह unknown है टाइप करें, और पोस्टग्रेएसक्यूएल आमतौर पर चीजों से वास्तविक प्रकार का अनुमान लगाता है जैसे कि आप इसे किस कॉलम में डाल रहे हैं या आप इसे किस फंक्शन में पास करते हैं।
इस मामले में, आप इसे array_agg . पर पास कर देते हैं , जो एक बहुरूपी है समारोह। यह छद्म प्रकार anyelement . के इनपुट ले सकता है , जिसका वास्तव में अर्थ है "रनटाइम पर इसका पता लगाएं"।
PostgreSQL अभी भी इसका पता लगाएगा सिवाय इसके कि array_to_string वास्तव में text[] नहीं लेता है इनपुट के रूप में। इसमें anyarray लगती है - एक अन्य बहुरूपी प्रकार, जैसे anyelement सरणियों के लिए।
तो पोस्टग्रेएसक्यूएल को यह बताने के लिए क्वेरी में कुछ भी नहीं है कि किस प्रकार का '' है। यह अनुमान लगा सकता है कि आपका मतलब text था , लेकिन इसके लिए यह थोड़ा उधम मचाता है। तो शिकायत करता है। यह समस्या नीचे तक सरल हो जाती है:
regress=> SELECT array_to_string(array_agg(''), ',');
ERROR: could not determine polymorphic type because input has type "unknown"
इसे हल करने के लिए, एक टाइप किया हुआ शाब्दिक लिखें:
TEXT '' AS name
या कास्ट का उपयोग करें:
CAST('' AS text) AS name
या पोस्टग्रेएसक्यूएल शॉर्टहैंड:
''::text
उदाहरण:
regress=> SELECT array_to_string(array_agg(TEXT ''), ',');
array_to_string
-----------------
(1 row)
regress=> SELECT array_to_string(array_agg(''::text), ',');
array_to_string
-----------------
(1 row)
regress=> SELECT array_to_string(array_agg(CAST('' AS text)), ',');
array_to_string
-----------------
(1 row)