zoukankan      html  css  js  c++  java
  • 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,去手动修改,数据库默认自增序列:

  • 相关阅读:
    TF用法指导
    二叉搜索树
    霍夫曼树
    集成学习—boosting和bagging
    值得关注的博客或者文章
    ElasticSearch中的sort排序和filedData作用
    ElasticSearch--validate验证搜索语句是否合法或者存在语法错误
    elasticsearch中query和filter的区别
    深度认识 Sharding-JDBC:做最轻量级的数据库中间层
    elasticserach数据库深度分页查询的原理
  • 原文地址:https://www.cnblogs.com/hellojesson/p/14475410.html
Copyright © 2011-2022 走看看