anyelement
. की हैंडलिंग वापसी प्रकार में वर्णित है। बहुरूपी प्रकार
:
आपके मामले में यह तर्क relation_name
. है anyelement
. के रूप में टाइप किया गया , और NULL::table1
. पास करके , यह वास्तव में योजनाकार को बताता है कि function1
. की यह विशेष कॉल SETOF table1
return लौटाना चाहिए . अब तक बहुत अच्छा।
अब समस्या यह है कि एक बार निष्पादित करने के बाद, फ़ंक्शन SETOF table1
वापस नहीं आता है लेकिन कुछ और। यह वह नहीं है जो निष्पादक उम्मीद कर रहा था, इसलिए त्रुटि।
प्रश्न का शीर्षक होने के बावजूद गतिशील पंक्तियों को कैसे वापस करें... , आप जो चाहते हैं वह गतिशील कॉलम या बहुरूपी परिणाम सेट है।
और यह एसक्यूएल के साथ एक कठिन लड़ाई है, क्योंकि किसी क्वेरी की निष्पादन योजना बनाने के लिए, योजनाकार को प्रत्येक मध्यवर्ती परिणाम के लिए प्रत्येक कॉलम को उसके प्रकार के साथ जानना होगा। यदि आप अपनी क्वेरी को किसी ऐसे फ़ंक्शन के साथ डिज़ाइन करते हैं जिसे इसके आउटपुट की संरचना को खोजने के लिए निष्पादित किया जाना है, जो चिकन और अंडे की समस्या पैदा करता है:नियोजन निष्पादन से पहले होना चाहिए, यह इस पर निर्भर नहीं हो सकता है।
इसकी डायनामिक टाइप-इनफेरिंग तकनीक के साथ anyelement
. पर लागू होता है , PostgreSQL पहले से ही इस बाधा को देखते हुए अधिक से अधिक बहुरूपता लागू करने के लिए लिफाफे को आगे बढ़ा रहा है।