我有一个包含两列的表,id是varchar,data是jsonb。我还有一个CSV文件,其中有新的ID,我想插入到表中,我想分配给这些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,但是我仍然不确定如何在查询中使用该表。

最佳答案

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

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

10-06 07:06
查看更多