gpt4 book ai didi

Django ORM 误读 PostgreSQL 序列?

转载 作者:行者123 更新时间:2023-11-29 12:01:22 25 4
gpt4 key购买 nike

背景:为 Django 应用(Django 1.1.1、Python2.4、psycopg2 和 Postgres 8.1)运行 PostgreSQL 数据库 我已经多次从 SQL 转储中恢复数据库。每次我这样做然后尝试添加一个新行时,无论是 shell、admin 还是站点前端,我都会收到此错误:

IntegrityError:重复键违反唯一约束“app_model_pkey”

数据转储正常,正在重置序列。 但如果我再次尝试添加该行,它就会成功! 所以我可以尝试在每个表中插入一个新行,然后一切似乎都变得很糟糕。

问题:鉴于 (1) SQL 转储良好并且 Postgres 正在正确读取它(根据 earlier question ),以及 (2) Django 的 ORM 似乎没有系统地失败下一个值,在这个特定实例中发生了什么?

最佳答案

Django 不以任何方式保存或直接读取序列值。我已经解释过了。在 this question: 2088210/django-object-creation-and-postgres-sequences .

当您尝试添加行时,Postgresql 会增加序列,即使操作结果不成功(引发重复键错误)序列增加也不会回滚。所以,这就是为什么它在您第二次尝试添加行时起作用的原因。

不知道你的sequence为什么设置的不对,请问dump之前和restore之后的sequence值是多少,对table的max() pk也一样?也许这是还原时的 8.1 错误?我不知道。我敢肯定:这不是 Django 的错。

关于Django ORM 误读 PostgreSQL 序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com