如何忽略更新查询中的错误?

时间:2018-07-24 08:28:33

标签: postgresql sql-update

我正在运行

之类的更新查询
update datavalue 
   set categoryoptioncomboid = '21519' 
 where dataelementid = '577' and 
       categoryoptioncomboid = '471';

但是它给出了错误

ERROR:  duplicate key value violates unique constraint "datavalue_pkey"
DETAIL:  Key (dataelementid, periodid, sourceid, categoryoptioncomboid, attributeoptioncomboid)=(577, 35538, 10299, 21519, 15) already exists.

有没有办法使postgres继续更新并跳过任何错误?有没有不使用循环过程的方法吗?

谢谢

1 个答案:

答案 0 :(得分:2)

我会尝试这样的事情:

update datavalue
set categoryoptioncomboid = '21519' 
where
  dataelementid = '577' and categoryoptioncomboid = '471'
  and not exists (
    select 1
    from datavalue dv
    where dv.dataelementid=datavalue.dataelementid
      and dv.periodid=datavalue.periodid
      and dv.sourceid=datavalue.sourceid
      and dv.categoryoptioncomboid='21519'
      and dv.attributeoptioncomboid=datavalue.attributeoptioncomboid
  );

另一种想法是用insert on conflict,然后删除不需要的行。但这需要了解datavalue表列的完整定义。