我有一个包含两列的表,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,但仍然不确定如何在查询中使用该表。
答案 0 :(得分:1)
不要使过程不必要地复杂化。
答案 1 :(得分:1)
是的,请使用暂存表将csv上传到其中,请确保在上传之前将其截断。上传后:
insert into prod_table
select * from csv_upload
on conflict (id) do update
set data = excluded.data;