कमांड को गतिशील रूप से बनाने के लिए मूल क्वेरी:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
यह एक क्वेरी उत्पन्न करता है जैसे:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
उद्धृत अपर-केस वर्तनी पर ध्यान दें। SQL कमांड के विपरीत, जहां गैर-उद्धृत पहचानकर्ता स्वचालित रूप से लोअर-केस में फोल्ड हो जाते हैं, आपकी तालिका में स्ट्रिंग्स अब केस-संवेदी हैं!
मेरा सुझाव है कि आप कभी नहीं डबल-कोट आइडेंटिफ़ायर और विशेष रूप से कानूनी, लोअर-केस नामों का उपयोग करें।
स्वचालित करने के लिए:
DO
$$BEGIN
EXECUTE (
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3
-- WHERE table3_id = 123 -- select only *one* row!
);
END$$;
आपको जरूरत समझने के लिए format()
समारोह। मैनुअल पढ़ें
।
आप इसे plpgsql फ़ंक्शन में भी लपेट सकते हैं और अतिरिक्त पैरामीटर पास कर सकते हैं: