如果发生冲突,请插入表格并从csv更新

时间:2019-09-19 16:01:32

标签: postgresql csv

我有一个包含两列的表,id是varchar,data是jsonb。我还有一个带有新ID的csv文件,我想将其插入表中,我要分配给这些ID的数据是相同的,如果ID已经存在,我想用来更新当前数据值新数据。这是我到目前为止所做的:

INSERT INTO "table" ("id", "data") 
VALUES ('[IDs from CSV file]', ' {dataObject}') 
ON CONFLICT (id) do UPDATE set data='{dataObject}';

我已经使用单个ID来运行它,但是现在我想对csv文件中的每个ID运行它,因此示例中的数组对此进行了说明。有没有办法使用查询来做到这一点?我本以为可以创建一个临时表并在其中导入ID,但仍然不确定如何在查询中使用该表。

2 个答案:

答案 0 :(得分:1)

不要使过程不必要地复杂化。

  1. 将csv导入临时表T2
  2. 更新T1,其中T2中的行匹配
  3. 从T2插入T1,其中行不匹配

答案 1 :(得分:1)

是的,请使用暂存表将csv上传到其中,请确保在上传之前将其截断。上传后:

insert into prod_table
   select * from csv_upload
      on conflict (id) do update
         set data = excluded.data;