Kueri dasar untuk membuat perintah secara dinamis:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
Ini menghasilkan kueri seperti:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Perhatikan ejaan huruf besar yang dikutip. Tidak seperti di perintah SQL, di mana pengidentifikasi yang tidak dikutip dilipat menjadi huruf kecil secara otomatis, string di tabel Anda sekarang peka huruf besar-kecil!
Saya sarankan Anda tidak pernah pengenal tanda kutip ganda dan gunakan nama legal dengan huruf kecil secara eksklusif.
Untuk mengotomatisasi:
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$$;
Anda membutuhkan untuk memahami format()
fungsi. Baca manual
.
Anda juga dapat membungkus ini menjadi fungsi plpgsql dan meneruskan parameter tambahan: