簡體   English   中英

Django將架構從sqlite遷移到Postgresql

[英]Django migrate schema from sqlite to postgresql

我正在開發一個基於django的大型項目。 在我的筆記本電腦上,我使用SQLite3作為數據庫。 我為模型創建了很多遷移。 一切似乎都正常。

然后,我想在生產服務器上使用PostgreSQL。 我准備了一個空數據庫,並嘗試執行manage.py syncdb 突然由於不存在關系,我得到一個錯誤。

Operations to perform:
  Synchronize unmigrated apps: suit, messages, humanize, imagekit, staticfiles, crispy_forms, storages, django_extensions, localflavor, registration
  Apply all migrations: [here list of my apps], sites, user_auth, sessions, auth
Synchronizing apps without migrations:
  Creating tables...
    Creating table registration_registrationprofile
    Running deferred SQL...
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
psycopg2.ProgrammingError: relation "user_auth_account" does not exist

嘗試刪除我的sqlite數據庫並使用新的sqlite執行syncdb :它創建架構沒有問題。

在這里,我意識到SQLite不使用外鍵關系,而只是對所有引用使用integer類型。 因此它適用於sqlite。 非常聰明,Django。 但是我所有的模型都是相互依賴的。 我想使用其他數據庫。

現在,我只能在SQLite上進行大量遷移。

我知道可以為首次創建模型的每個應用程序一次遷移。 但這將是一個地獄。

是否可以檢測到依存關系並以正確的順序運行這些遷移?

Django可以正確處理遷移中模型之間的依賴關系。 它無法處理以及在文檔中明確警告的是依賴於已遷移應用程序的未遷移應用程序:

但是請注意,由於沒有遷移的本質,未遷移的應用程序不能依賴於遷移的應用程序。 這意味着通常不可能使未遷移的應用程序具有要遷移的應用程序的ForeignKey或ManyToManyField。 某些情況下可能會起作用,但最終會失敗。

警告

即使根據遷移的應用程序看來一切都適用於未遷移的應用程序,Django可能也不會生成所有必要的外鍵約束!

在這種特定情況下,似乎registration應用程序依賴於用戶模型。 您需要將此應用升級到具有支持Django 1.7+所需的遷移文件的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM