odoo开发笔记-安装模块异常,数据库提示:DETAIL Key(id)=(19) already exists.
场景描述:
odoo安装模块异常,提示数据库违反唯一约束:
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,也就是需要重置下数据库的自增序列起始值。
问题处理:
--- 把当前最大的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,去手动修改,数据库默认自增序列: