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

PostgreSQL multi INSERT...RETURNERER med flere kolonner

Brug datamodificerende CTE'er for at sammenkæde dine tre INDSÆT. Noget som dette:

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;
  • Det er typisk bedst at tilføje en liste over kolonnedefinitioner for INSERT s (bortset fra særlige tilfælde). Ellers, hvis tabelstrukturen ændres, kan din kode gå i stykker på overraskende måder.

  • Jeg har udeladt kolonner, hvor du bare ville indtaste DEFAULT . Standarder indsættes automatisk. Kortere, samme resultat.

  • Den sidste, valgfri RETURNING returnerer den resulterende user_id - åbenbart fra en sekvens eller en anden standard. Det er faktisk user_id fra table3 , men det er det samme, medmindre du har nogle triggere eller anden magi, der forstyrrer.

Mere om datamodificerende (også kaldet "skrivbare") CTE'er:

  • Er SELECT-type-forespørgsler den eneste type, der kan indlejres?


  1. Installation af MySQL-python

  2. Bestem rang baseret på flere kolonner i MySQL

  3. Sådan opretter du skrivebeskyttet bruger i PostgreSQL

  4. HAProxy:Alle Severalnines ressourcer