PostgreSQL多INSERT … RETURNING多列

我用Postgres 9.3build立一个数据库作为后台,有3个表格:

table1 (user_id, username, name, surname, emp_date) table2 (pass_id, user_id, password) table3 (user_dt_id, user_id, adress, city, phone) 

可以看出table2table3table1子表。
我可以提取table1 (父)中新插入行的user_id

 INSERT INTO "table1" (default,'johnee','john','smith',default) RETURNING userid; 

我需要将新提取的id(从table1 )插入到table2table3 user_id列以及这些表的唯一其他数据。 基本上3 X INSERT …
我怎么做?

使用数据修改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; 
  • build议始终为INSERT添加列定义列表 (特殊代码除外)。 否则,如果表格结构发生变化,您的代码可能会以惊人的方式破解。

  • 我省略了列定义列表中您只需inputDEFAULT 。 默认值是自动应用的。 更短,相同的结果。

  • 最后的RETURNING是可选的,如果你想返回结果user_id (显然是来自一个序列或其他的默认值),它实际上是从table3返回user_id ,但是除非你有一些触发器或其他的魔法干扰,否则这是一样的。

有关数据修改的更多细节(又名“可写”)CTE:

  • SELECTtypes查询是唯一可以嵌套的types吗?