Základní dotaz pro dynamické sestavení příkazu:
SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
To vytvoří dotaz jako:
INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"
Všimněte si pravopisu velkých písmen v uvozovkách. Na rozdíl od příkazů SQL, kde jsou identifikátory v uvozovkách automaticky složeny na malá písmena, řetězce ve vaší tabulce nyní rozlišují velká a malá písmena!
Doporučuji vám nikdy identifikátory v uvozovkách a používejte výhradně legální názvy s malými písmeny.
Pro automatizaci:
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$$;
potřebujete abyste porozuměli format()
funkce. Přečíst příručku
.
Můžete to také zabalit do funkce plpgsql a předat další parametry: