【问题标题】:Migrating data from SQLite3 to Postgresql using DBeaver使用 DBeaver 将数据从 SQLite3 迁移到 Postgresql
【发布时间】:2019-08-08 07:15:13
【问题描述】:

我的项目使用 SQLite3 数据库,但现在我需要从 SQLite3 迁移到 PostgreSQL。我已经使用 DBeaver 使用“导入数据”选项来执行此操作。在将所有表从 SQLite3 导入 PostgreSQL 结束时,我在尝试添加新内容时注意到了这个错误:

IntegrityError at /engine/kernel/keyconcept/add/

重复键值违反唯一约束 "kernel_keyconcept_pkey" DETAIL: Key (id)=(4) 已经存在。

如果我在这个项目中添加一个使用新 DB(PostgreSQL) 的新模型,添加内容没有问题,但如果我使用旧模型,我会看到上面的 IntegrityError .

我对只有两行的模型进行了测试:第一次尝试时我收到了相同的错误,但键 ID 为 1,第二次尝试时我收到了相同的错误,但键 ID 为 2。当我'已经第三次尝试了,我能够添加内容,并且下一次尝试也会发生同样的想法。

所以我认为迁移后每个表的行计数器永远不会从最后一个内容开始,而是从零开始。这很奇怪,因为以前我做过相同的迁移,但是从 SQLite3 到 SQLite3 没有问题。

我该如何解决这个问题?

【问题讨论】:

    标签: django postgresql migration dbeaver


    【解决方案1】:

    您必须重置用于生成主键的序列。有一个管理命令打印必要的 SQL:sqlsequencereset

    请注意,它只打印 SQL,您必须手动执行它(您可能可以使用 DBeaver 执行此操作)。

    【讨论】:

    • 我用过这个,但没有任何改变。我在 INSTALLED_APP 中的一个应用程序是“关于”,我写了django-admin sqlsequencereset about,我看到了这个错误消息:django.core.exceptions.ImproperlyConfigured: Requested setting STATIC_URL, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
    • 如果我使用python3 manage.py sqlsequencereset about,我会看到:BEGIN; SELECT setval(pg_get_serial_sequence('"about_eventchoice"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "about_eventchoice"; SELECT setval(pg_get_serial_sequence('"about_attivita"','id'), coalesce(max("id"), 1), max("id") IS NOT null) FROM "about_attivita"; COMMIT;,但当我尝试添加内容时,我再次看到IntegrityError。所有应用都会发生这种情况。
    • sqlsequencereset 命令只打印 SQL。您必须手动执行它,例如使用 DBeaver 或 python3 manage.py dbshell 等图形工具
    • 我不清楚如何做到这一点,我认为这取决于我是新手这一事实。但我已经使用转储数据/加载数据解决了。现在我把答案放在我的问题上。感谢您的支持
    【解决方案2】:

    我已经解决了使用dumpdataloaddata 而不是DBeaver 并遵循this examples 一切正常。

    在我的情况下,我需要将一些应用程序排除为身份验证和内容类型,然后使用转储数据:

    python3 manage.py dumpdata --exclude contenttypes --exclude auth --indent 2 > db.json
    

    要上传我使用过的数据:

    python3 manage.py loaddata db.json
    

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2012-07-02
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多