यह RECORD रिटर्निंग फंक्शन के लिए संभव है।
CREATE FUNCTION calculation(how_many integer) RETURNS SETOF RECORD
LANGUAGE plpgsql
AS $fff$
BEGIN
IF how_many = 1
THEN RETURN QUERY SELECT 'foo'::text;
ELSIF how_many = 2
THEN RETURN QUERY SELECT 'foo'::text, 'bar'::text;
END IF;
END;
$fff$
;
और अब आप यह कर सकते हैं:
jbet=> SELECT * FROM calculation(1) AS f(first_col text);
first_col
-----------
foo
(1 row)
jbet=> SELECT * FROM calculation(2) AS f(first_col text, second_col text);
first_col | second_col
-----------+------------
foo | bar
(1 row)
बहुत गंभीर नकारात्मक पक्ष यह है कि हर बार जब आप फ़ंक्शन को कॉल करते हैं तो आपको दिए गए कॉलम के सेट को परिभाषित करना होता है, इसलिए मुझे नहीं लगता कि आपको यह उत्तर उपयोगी लगेगा:)
वैसे भी, Postgresql को प्रत्येक SELECT पहले . के लौटे हुए प्रकार को जानना होगा यह क्वेरी चलाता है, इसलिए एक या दूसरे तरीके से आपको कॉलम को परिभाषित करना होगा।
JSON रिटर्न वैल्यू एक उचित उत्तर हो सकता है यदि आप केवल डेटा चाहते हैं और परवाह नहीं है कि अलग कॉलम हैं या नहीं।