gpt4 book ai didi

sql - Postgresql 转储是否创建以最后一个键开头或之后的序列?

转载 作者:搜寻专家 更新时间:2023-10-30 22:21:33 24 4
gpt4 key购买 nike

我最近在 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/

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