sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL multi INSERT...RETURNERAR med flera kolumner

Använd datamodifierande CTE för att koppla ihop dina tre INSERT. Något så här:

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 är vanligtvis bäst att lägga till en kolumndefinitionslista för INSERT s (förutom i speciella fall). Annars, om tabellstrukturen ändras, kan din kod gå sönder på överraskande sätt.

  • Jag utelämnade kolumner där du bara skulle ange DEFAULT . Standardinställningarna infogas automatiskt. Kortare, samma resultat.

  • Den sista, valfria RETURNING returnerar det resulterande user_id - uppenbarligen från en sekvens eller någon annan standard. Det är faktiskt user_id från table3 , men det är detsamma om du inte har några triggers eller annan magi som stör.

Mer om datamodifierande (a.k.a. "skrivbara") CTE:er:

  • Är SELECT-frågor den enda typen som kan kapslas?


  1. Hur säkerhetskopierar man en postgresql-databas inifrån psql?

  2. SLIP TABELL OM FINNS Exempel i PostgreSQL

  3. Hur returnerar jag flera resultatuppsättningar med SqlCommand?

  4. Cloud Disaster Recovery för MariaDB och MySQL