De basisquery om het commando dynamisch op te bouwen:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
Dit levert een zoekopdracht op als:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Let op de geciteerde spelling in hoofdletters. In tegenstelling tot SQL-opdrachten, waar ID's zonder aanhalingstekens automatisch naar kleine letters worden gevouwen, zijn de tekenreeksen in uw tabel nu hoofdlettergevoelig!
Ik stel voor dat je nooit dubbele aanhalingstekens en gebruik uitsluitend legale namen in kleine letters.
Om te automatiseren:
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$$;
Je nodig om de format()
functie. Lees de handleiding
.
Je kunt dit ook in een plpgsql-functie inpakken en extra parameters doorgeven: