在postgresql中插入/更新功能

时间:2013-12-28 16:32:00

标签: sql postgresql insert-update

我使用PostgreSQL中的导入功能手动更新数据库中的表。使用大量数据我遇到了重复主键的问题。我正在寻找一个脚本来只上传不违反主键假设的值,而那些违反的值将被忽略(不上传或更新)。

我已经看过一个代码可以做我需要的但是不太确定它是否适用于我。

我正在使用的专栏是: acc_ph_id(primary_key); acc_ph_no; ph_type; ph_flag

任何建议都会受到高度赞赏,因为我对Postgresql很新。

1 个答案:

答案 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;