Den grundläggande frågan för att bygga kommandot dynamiskt:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
Detta ger en fråga som:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Observera den citerade stavningen med versaler. Till skillnad från i SQL-kommandon, där identifierare utan citattecken viks till gemener automatiskt, är strängarna i din tabell nu skiftlägeskänsliga!
Jag föreslår att du aldrig identifierare med dubbla citattecken och använd endast lagliga namn med små bokstäver.
För att automatisera:
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 behöver för att förstå format()
fungera. Läs manualen
.
Du kan linda in detta i en plpgsql-funktion också och skicka ytterligare parametrar: