批量插入多个表

Roc*_*nja 3 postgresql cte postgresql-9.3 bulk-insert

我有两个表可以执行一些批量插入:

  1. 密钥:key_id (pk), key_name
  2. related_key: related_key_id (pk), key_id (fk)

第一INSERT

values_data = "($$key_1$$), ($$key_2$$)"

INSERT INTO key (key_name) VALUES values_data
Run Code Online (Sandbox Code Playgroud)

INSERT

values_data = "(1, `the id of the first value inserted in key`)
             , (1, `the id of the sec value inserted in key`)"

INSERT INTO related_key (related_key_id, key_id) VALUES values_data
Run Code Online (Sandbox Code Playgroud)

我不知道如何做第二个,INSERT因为我不知道如何为插入到key表中的行获取这些 id 。

或者有没有更好的方法来做到这一点?

Erw*_*ter 7

使用数据修改 CTE在单个语句中链接插入。

从你的例子假设你要插入1related_key_id所有行。

WITH ins_key AS (
   INSERT INTO key (key_name)
   VALUES ($$key_1$$)
        , ($$key_2$$)
   RETURNING key_id       -- return newly generated key_id(s)
   )
INSERT INTO related_key (related_key_id, key_id) 
SELECT 1, key_id
FROM   ins_key;
Run Code Online (Sandbox Code Playgroud)