sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo INSERTAR EN la tabla desde una consulta dinámica?

La consulta básica para construir el comando dinámicamente:

SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
            , tbl_des, col_des, col_src, tbl_src) As sql
FROM   table3;

Esto produce una consulta como:

INSERT INTO "Table2" (col2) SELECT col1 FROM "Table1"

Tenga en cuenta la ortografía en mayúsculas citada. A diferencia de los comandos SQL, donde los identificadores sin comillas se pasan a minúsculas automáticamente, ¡las cadenas en su tabla ahora distinguen entre mayúsculas y minúsculas!

Te sugiero nunca identificadores de comillas dobles y uso exclusivo de nombres legales en minúsculas.

Para automatizar:

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$$;

Usted necesita para comprender el format() función. Lea el manual .

También puede envolver esto en una función plpgsql y pasar parámetros adicionales: