使用 pgadmin4 将复制查询导入到 postgresql 时更新而不是插入相同的主键

Update instead inserting same primary key when import using copy query to postgresql using pgadmin4

正如标题所说,我有 table 场 food_id(PK) 和 food_name 的食物。 我已经在 table

上有了这些数据
food_id|food_name
-----------------
0000001|food1
0000002|food2
0000003|food3

在我的 csv 上

0000001|apple
0000004|banana
0000005|grape

如果没有重复的 PK,这是我的查询

 copy foodfrom 'd:\testingfood.csv' delimiter '|' csv

但我想将 food1 更新为 apple 到 apple 并插入 0000004|banana 和 0000005|grape?

可能吗?

您不能在单个 COPY 命令中完成此操作。使用临时 table 和 INSERTON CONFLICT,例如:

create temp table tmp_food (like food); -- create temporary table like food

copy tmp_food from 'd:\testingfood.csv' delimiter '|' csv;  -- copy to temp table

insert into food (food_id, food_name)   -- insert into food from temp table
select food_id, food_name
from tmp_food
on conflict (food_id) do                -- update instead of error
update set food_name = excluded.food_name;

drop table tmp_food;                    -- drop temp table