我正在运行
之类的更新查询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继续更新并跳过任何错误?有没有不使用循环过程的方法吗?
谢谢
答案 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
表列的完整定义。