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,去手動修改,數據庫默認自增序列:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM