PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL multi INSERT...RETURNING с множество колони

Използвайте CTE за модифициране на данни да верижите вашите три INSERT. Нещо като това:

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;
  • Обикновено е най-добре да добавите списък с дефиниции на колони за INSERT s (с изключение на специални случаи). В противен случай, ако структурата на таблицата се промени, кодът ви може да се счупи по изненадващи начини.

  • Пропуснах колони, където просто трябва да въведете DEFAULT . Настройките по подразбиране се вмъкват автоматично. По-кратко, същият резултат.

  • Окончателното, незадължително RETURNING връща получения user_id - очевидно от последователност или някаква друга по подразбиране. Това всъщност е user_id от table3 , но това е същото, освен ако нямате някакви задействания или друга магическа намеса.

Повече за CTE-то за модифициране на данни (известно още като "записваеми"):

  • Заявките от тип SELECT ли са единственият тип, който може да бъде вложен?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Производителност на OLTP след PostgreSQL 8.3

  2. Как да конвертирате Postgres база данни в sqlite

  3. PostgreSQL:НЕ IN спрямо ОСВЕН разлика в производителността (редактирано #2)

  4. CS50:LIKE оператор, заместване на променлива с % разширение

  5. Как да разбера кой дял ще се използва при разделяне на хеш на Postgres?