La consulta básica para construir el comando dinámicamente:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
Esto produce una consulta como:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Tenga en cuenta la ortografía en mayúsculas citada. A diferencia de los comandos SQL, donde los identificadores sin comillas se pasan a minúsculas automáticamente, ¡las cadenas en su tabla ahora distinguen entre mayúsculas y minúsculas!
Te sugiero nunca identificadores de comillas dobles y uso exclusivo de nombres legales en minúsculas.
Para automatizar:
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$$;
Usted necesita para comprender el format()
función. Lea el manual
.
También puede envolver esto en una función plpgsql y pasar parámetros adicionales: