PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak INSERT INTO z dynamicznej kwerendy?

Podstawowe zapytanie do dynamicznego zbudowania polecenia:

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

Daje to zapytanie takie jak:

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

Zwróć uwagę na cytowaną pisownię wielkimi literami. W przeciwieństwie do poleceń SQL, gdzie identyfikatory bez cudzysłowów są automatycznie zamieniane na małe litery, łańcuchy w tabeli są teraz rozróżniane!

Proponuję nigdy podwójnego cudzysłowu identyfikatorów i używaj wyłącznie legalnych nazw pisanych małymi literami.

Aby zautomatyzować:

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

potrzebujesz zrozumieć format() funkcjonować. Przeczytaj instrukcję .

Możesz również zapakować to do funkcji plpgsql i przekazać dodatkowe parametry:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres - jak zwrócić wiersze z liczbą 0 za brakujące dane?

  2. Wstaw dane do tabel połączonych kluczem obcym

  3. Polecenie COPY i błąd nowego wiersza

  4. Przegląd programowania po stronie serwera w PostgreSQL

  5. Django makemigrations Nie wykryto zmian w aplikacji