从腌制数据加载会导致新保存的数据库错误

发布于 2024-09-01 11:50:28 字数 203 浏览 10 评论 0原文

为了节省移动数据的时间,我腌制了一些模型并将它们转储到文件中。然后我使用相同的模型将它们重新加载到另一个数据库中。保存工作正常,对象保留了它们的旧 ID,这正是我想要的。但是,在保存新对象时,我遇到了 nextval 错误。

由于不太熟悉 postgres,我不知道如何解决这个问题,以便我可以保留旧记录及其现有 ID,同时能够继续添加新数据。

谢谢, 托马斯

In order to save time moving data I pickled some models and dumped them to file. I then reloaded them into another database using the same exact model. The save worked fine and the objects kept their old id which is what I wanted. However, when saving new objects I run into nextval errors.

Not being very adept with postgres, I'm not sure how to fix this so I can keep old records with their existing ID while being able to continue adding new data.

Thanks,
Thomas

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

和影子一齐双人舞 2024-09-08 11:50:29

实际上有一个 django 命令可以打印出序列重置 SQL,名为 sqlsequencereset

$ python manage.py sqlsequencereset issues
BEGIN;
SELECT setval('"issues_project_id_seq"', coalesce(max("id"), 1), max("id") IS NOT null) FROM "issues_project";
COMMIT;

There is actually a django command that prints out sequence reset SQL called sqlsequencereset.

$ python manage.py sqlsequencereset issues
BEGIN;
SELECT setval('"issues_project_id_seq"', coalesce(max("id"), 1), max("id") IS NOT null) FROM "issues_project";
COMMIT;
[旋木] 2024-09-08 11:50:29

我认为您正在谈论用于自动递增 id 字段的序列。

这里最简单的解决方案是在“psql”shell中:

select max(id)+1 from YOURAPP_YOURMODEL;

并使用此命令中的值:

alter sequence YOURAPP_YOURMODEL_id_seq restart with MAX_ID_FROM_PREV_STATEMENT;

这应该可以解决问题。

I think that you are talking about the sequence that is being used for autoincrementing your id fields.

the easiest solution here would be in a "psql" shell:

select max(id)+1 from YOURAPP_YOURMODEL;

and use the value in this command:

alter sequence YOURAPP_YOURMODEL_id_seq restart with MAX_ID_FROM_PREV_STATEMENT;

that should do the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文