作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我最近在 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 之后调用其他命令来启动序列吗?非常好奇。
最佳答案
转储很好,没问题。如果您的代码(或列的默认值)使用 nextval() 从序列中获取下一个值,那么一切都会很好。检查你的代码,看看它做了什么,执行了什么 SQL。通过此信息,您可以了解出现问题的原因。
祝你好运!
关于sql - Postgresql 转储是否创建以最后一个键开头或之后的序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058675/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!