PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come INSERIRE NELLA tabella dalla query dinamica?

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: