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

PostgreSQL multi INSERT...RETURNING z wieloma kolumnami

Użyj modyfikacji danych CTE aby połączyć trzy WKŁADKI. Coś takiego:

WITH ins1 AS (
   INSERT INTO table1 (username, name,  surname)
   VALUES ('johnee','john','smith')
   RETURNING user_id
   )
, ins2 AS (
   INSERT INTO table2 (user_id, password)
   SELECT ins1.user_id, 'secret'
   FROM   ins1                            -- nothing to return here
   )
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM   ins1
RETURNING user_id;
  • Zazwyczaj najlepiej jest dodać listę definicji kolumny dla INSERT s (z wyjątkiem szczególnych przypadków). W przeciwnym razie, jeśli zmieni się struktura tabeli, Twój kod może się zepsuć w zaskakujący sposób.

  • Pominąłem kolumny, w których wystarczy wpisać DEFAULT . Wartości domyślne są wstawiane automatycznie. Krótszy, ten sam wynik.

  • Ostateczny, opcjonalny RETURNING zwraca wynikowy user_id - oczywiście z sekwencji lub jakiegoś innego domyślnego. W rzeczywistości jest to user_id z table3 , ale to tak samo, chyba że masz jakieś wyzwalacze lub inną magię.

Więcej o modyfikowaniu danych (tzw. „zapisywalny”) CTE:

  • Czy zapytania typu SELECT są jedynym typem, który można zagnieżdżać?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL Upsert rozróżnia wstawione i zaktualizowane wiersze za pomocą kolumn systemowych XMIN, XMAX i innych

  2. Jak zainstalować Haproxy i Keepalived

  3. PostgreSQL usuń całą zawartość

  4. Jak stworzyć widok w PostgreSQL

  5. Jak upsertować pandy DataFrame do tabeli PostgreSQL?