Postgresql

在多個表中批量插入

  • April 12, 2018

我有兩個表,我在其中執行一些批量插入:

  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

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

我不知道如何做第二個INSERT,因為我不知道如何為插入到key表中的行獲取這些 ID。

或者有沒有更好的方法來做到這一點?

使用數據修改 CTE將插入連結到單個語句中。

從您的範例中假設您要在所有行中插入1for 。related_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;

引用自:https://dba.stackexchange.com/questions/75210