【问题标题】:ERROR: duplicate key value violates unique constraint in postgres错误:重复的键值违反了 postgres 中的唯一约束
【发布时间】:2016-06-06 17:52:31
【问题描述】:

这里 slo_order_item_id 是唯一约束

 INSERT INTO shb.sale_order  
              ( 
                          slo_order_item_id, 
                          slo_order_id, 
                          slo_channel, 
                          slo_status, 
                          slo_channel_status, 
                          slo_order_date, 
                          slo_dispatch_by_date, 
                          slo_sku, 
                          slo_quantity, 

                          slo_selling_price, 
                          slo_shipping_charge, 

                          slo_vendor_id 
              ) 
  SELECT Distinct vss_order_item_id, 
         vss_order_id, 
         vss_channel_name, 
         vss_sale_order_item_status, 
         vss_sale_order_item_status, 
         case when is_date(vss_order_date) then vss_order_date::date else null end,
         case when is_date(vss_dispatch_date) then vss_dispatch_date::date else null end,
         vss_sku, 
         1, 

         vss_selling_price, 
         vss_shipping_charge, 

         vss_vendor_id 
  FROM   imp.vendor_sale_staging  udt
  WHERE not exists (select 1 from shb.sale_order where  slo_order_item_id = udt.vss_order_item_id);

我也试试

WHERE vss_order_item_id not in (select slo_order_item_id from shb.sale_order);

但是这两个都给出了错误。

错误:重复键值违反唯一约束 “unique_sale_order_slo_order_item_id”细节:关键 (slo_order_item_id)=(1027559930) 已经存在。

为什么会报错? 哪个where condition 工作得快,为什么?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    临时表中可能有重复的值。您可以通过以下方式进行检查:

    select vss_order_item_id, count(*)
    from imp.vendor_sale_staging
    group by vss_order_item_id
    having count(*) > 1;
    

    如果是这种情况,那么我建议修复临时表。但是,加载内容的快速技巧是使用distinct on 而不是distinct

    SELECT Distinct on (vss_order_item_id) . . .
    FROM imp.vendor_sale_staging udt
    WHERE not exists (select 1 from shb.sale_order where  slo_order_item_id = udt.vss_order_item_id)
    ORDER BY vss_order_item_id;
    

    【讨论】:

    • 感谢它的工作。还有我尝试过的两个条件之间有什么区别。
    猜你喜欢
    • 2012-03-03
    • 2021-04-10
    • 2020-05-28
    • 2022-11-04
    • 2018-08-16
    • 2020-02-15
    • 2016-07-27
    • 2012-06-20
    相关资源
    最近更新 更多