Основната заявка за динамично изграждане на командата:
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 и да подадете допълнителни параметри: