odoo开发笔记 -- 安装模块异常,数据库提示:DETAIL Key(id)=(19) already exists.

场景描述:

  安装新模块的时候,提示数据库违反唯一约束:

psycopg2.IntegrityError:duplicate key value violates unique constraint "product_category_pkey"
DETAIL Key(id)=(19) already exists.

原因分析:

   违反主键唯一约束,说明在安装该新模块的时候,需要往相应表里创建新数据,插入数据时,相关表的id出现冲突,提示已经id已经存在,这里的表是“商品类目:product_category”表,而表的ID是自动增长的,表里边已经存在手动导入的1万多条数据,那为什么id还是19或者10几,正常来讲应该是现有数据的1万多起步!

    问题出在哪里?

    从日志提示中发现,插入数据时,提示表的product_category_id_seq冲突,也就是创建一条新数据,下一个id并不是现有最大行数10135的下一位1036!因此,要解决这个问题,需要我们设置下数据库该表的自增序列起始值。---进一步确认问题,发现是由于:表“商品类目”数据是手动导入的,用了自己的ID,没有触发数据库设置的表ID自动增长。---所以,后续往数据库表里手动导入数据时,也要注意这点。

问题处理:

--- 把当前最大的id做为当前的id自增起始数
--- 语法:
select setval('your_table_id_seq',(select max(id) from 表名));

--- 这里实际执行:
select setval('product_category_id_seq',(select max(id) from product_category));

注意:上边的语句看着是select查询语句,其实它会对数据库记录做修改,所以,执行的时候,要小心 !

补充:

也可以通过工具: DBeaver,去手动修改,数据库默认自增序列:

 

posted @ 2021-03-03 16:47  hello-Jesson  阅读(1282)  评论(0编辑  收藏  举报