Den grundlæggende forespørgsel til at bygge kommandoen dynamisk:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
Dette producerer en forespørgsel som:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Bemærk den citerede stavemåde med store bogstaver. I modsætning til i SQL-kommandoer, hvor identifikatorer uden anførselstegn automatisk foldes til små bogstaver, er strengene i din tabel nu store og små bogstaver!
Jeg foreslår, at du aldrig identifikatorer med dobbelte anførselstegn, og brug udelukkende lovlige navne med små bogstaver.
For at automatisere:
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$$;
Du bruger at forstå format()
fungere. Læs manualen
.
Du kan også pakke dette ind i en plpgsql-funktion og sende yderligere parametre: