You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除代码中SQL唯一约束后仍报重复键错误,寻求技术指导

解决方案指导

1. 确认数据库中的残留约束

登录模块对应的数据库,执行以下SQL查询,查看目标表上的所有唯一约束:

SELECT conname, pg_get_constraintdef(c.oid)
FROM pg_constraint c
JOIN pg_class t ON c.conrelid = t.oid
JOIN pg_namespace n ON t.relnamespace = n.oid
WHERE t.relname = '替换为你的表名'  -- 比如存储参考采购价的自定义表或product_supplierinfo
AND n.nspname = 'public'
AND contype = 'u';

执行后确认reference_price_uniq是否存在,以及它的约束字段是否为(branch_id,product_id,product_tmpl_id)。

2. 删除数据库中的冗余约束

如果确认该约束是不需要的旧约束,执行SQL删除:

ALTER TABLE 替换为你的表名 DROP CONSTRAINT IF EXISTS reference_price_uniq;

注意:执行前建议备份数据库,避免误操作。

3. 验证模块升级有效性

  • 检查模块的__manifest__.py(旧版本为__openerp__.py)中的版本号是否已更新,确保升级操作触发了完整的模块更新流程。
  • 确认代码中已完全移除所有相关的_sql_constraints配置,包括可能在其他继承类中定义的同名约束。

4. 清理重复数据(可选)

如果需要规范现有数据,可保留每组重复记录中的一条,删除其余项:

-- 示例:保留每组重复记录中ID最小的条目
DELETE FROM 替换为你的表名
WHERE id NOT IN (
    SELECT MIN(id)
    FROM 替换为你的表名
    GROUP BY branch_id, product_id, product_tmpl_id
);

内容的提问来源于stack exchange,提问作者Muhammad Saleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:27:33