我使用PostgreSQL中的导入功能手动更新数据库中的表。使用大量数据我遇到了重复主键的问题。我正在寻找一个脚本来只上传不违反主键假设的值,而那些违反的值将被忽略(不上传或更新)。
我已经看过一个代码可以做我需要的但是不太确定它是否适用于我。
我正在使用的专栏是: acc_ph_id(primary_key); acc_ph_no; ph_type; ph_flag
任何建议都会受到高度赞赏,因为我对Postgresql很新。
答案 0 :(得分:0)
将表上传到没有约束的临时表中。
然后将表加载到完整表中,消除重复:
insert into real_table(acc_ph_id, acc_ph_no, ph_type, ph_flag)
select distinct on (acc_ph_id) acc_ph_id, acc_ph_no, ph_type, ph_flag
from staging_table
order by acc_ph_id;
编辑:
哦,如果问题是已经存在的密钥,那么请执行:
insert into real_table(acc_ph_id, acc_ph_no, ph_type, ph_flag)
select distinct on (acc_ph_id) acc_ph_id, acc_ph_no, ph_type, ph_flag
from staging_table st
where not exists (select 1
from real_table rt
where rt.acc_ph_id = st.acc_ph_id
)
order by acc_ph_id;