sql >> Databáze >  >> RDS >> PostgreSQL

Jak INSERT INTO tabulky z dynamického dotazu?

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:




  1. sledování změn v mysql

  2. array_push() vs. $array[] =.... Který je nejrychlejší?

  3. Rails:Zobrazí stránku údržby, pokud není k dispozici připojení k databázi

  4. Co jsou aplikace v reálném čase?