इसे स्वचालित करने के लिए, आपको गतिशील SQL की आवश्यकता है
CREATE OR REPLACE FUNCTION f_multi_select()
RETURNS SETOF table1
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY EXECUTE
(
SELECT string_agg(format('SELECT * FROM %I', tbl), ' UNION ALL ')
FROM (SELECT tbl FROM tablenames ORDER BY id) sub
);
END
$func$;
कॉल करें:
SELECT * FROM f_multi_select();
यह मानते हुए कि सभी तालिकाएँ समान पंक्ति प्रकार साझा करती हैं - इसलिए हम फ़ंक्शन के रिटर्न प्रकार को परिभाषित करने के लिए कोई भी चुन सकते हैं।
मैंने ORDER BY
. के साथ एक सबक्वायरी में फेंक दिया - यदि तालिकाओं का क्रम सार्थक हो।
संबंधित: