La query di base per compilare il comando in modo dinamico:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
Questo produce una query come:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Nota l'ortografia maiuscola citata. A differenza dei comandi SQL, in cui gli identificatori senza virgolette vengono automaticamente ripiegati in minuscolo, le stringhe nella tabella ora fanno distinzione tra maiuscole e minuscole!
Ti suggerisco di mai identificatori di virgolette doppie e utilizzare esclusivamente nomi legali, minuscoli.
Per automatizzare:
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$$;
Hai necessità per comprendere il format()
funzione. Leggi il manuale
.
Puoi anche racchiuderlo in una funzione plpgsql e passare parametri aggiuntivi: