1

我最近在一个 Django 项目后面创建了一个数据库的 SQL 转储,在清理 SQL 之后能够恢复数据库和所有数据。问题是序列都被搞砸了。我尝试添加一个新用户并生成 Python 错误IntegrityError: duplicate key violates unique constraint

自然地,我认为我的 SQL 转储并没有重新启动序列。但它确实:

DROP SEQUENCE "auth_user_id_seq" CASCADE;
CREATE SEQUENCE "auth_user_id_seq" INCREMENT 1 START 446 MAXVALUE 9223372036854775807 MINVALUE 1 CACHE 1;
ALTER TABLE "auth_user_id_seq" OWNER TO "db_user";

我发现重复尝试创建用户(或任何具有现有数据和此类序列的表中的任何新行)允许成功创建对象/行。这解决了紧迫的问题。

但是鉴于该表中的最后一个用户 ID 是 446——与上面创建序列中的起始值相同——看起来 Postgresql 只是尝试使用该键开始创建行。

SQL 转储是否提供了错误的开始键 1?或者我应该在给定的开始 ID 之后调用其他命令来启动序列吗?非常好奇。

4

1 回答 1

3

转储很好,没问题。如果您的代码(或列的默认值)使用 nextval() 从序列中获取下一个值,那么一切都会好起来的。检查你的代码,看看它做了什么,执行了什么 SQL。有了这些信息,您就可以了解出现问题的原因。

祝你好运!

于 2010-06-17T07:46:52.223 回答